如何解决如何在python中将行值转换为列名和相同的列名作为列值?
我想将行值转换为列名,而这些列名就是列值。我尝试过使用枢轴,但它没有提供所需的输出。
Data:
col1 col2 col3 col4
x1 y1 z1 a1
x1 y1 z1 a2
x1 y1 z1 a3
我尝试过如下:
Data.pivot(columns='Col4',values='col4')
Output:
a1 a2 a3
a1 NAN NAN
NAN a2 NAN
NAN NAN a3
Desired output:
col1 col2 col3 a1 a2 a3
x1 y1 z1 a1 a2 a3
解决方法
您可以使用 pivot
,但您需要指定 index
参数以保留您的“col1”、“col2”、“col3”。完成此操作后,您可以稍微清理数据框以获得所需的结果。
out = (df.pivot(index=["col1","col2","col3"],columns="col4",values="col4")
.rename_axis(columns=None)
.reset_index())
print(out)
col1 col2 col3 a1 a2 a3
0 x1 y1 z1 a1 a2 a3
步骤
-
pivot(...)
:根据需要旋转数据框。这使得MultiIndex
为“col1”、“col2”和“col3”。然后是来自“col4”值的实际列和值 -
rename_axis(columns=None)
:pivot
使列成为具有名称的Index
对象。我发现这个名字让人们无法调整数据框的表示方式。在这里,我从Index
列中删除了名称,以便它可以表示 OP 期望的方式 -
reset_index()
如前所述 -pivot
使MultiIndex
为“col1”、“col2”和“col3”。我们在这里使用reset_index()
来获取这些值并将其插入到DataFrame
的实际数据中,而不是作为MultiIndex
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。