[英]Transpose Pandas Dataframe Python
我有以下 dataframe:
Status Percentage Value Name Tahun
0 X 66.666667 4.0 A 2021
1 Y 33.333333 2.0 A 2021
2 Z 0.000000 0.0 A 2021
0 X 25.000000 2.0 A 2020
1 Y 62.500000 5.0 A 2020
2 Z 12.500000 1.0 A 2020
我想转置 dataframe 并将列 header 更改为Status
值。 理想情况下 output 应该看起来像
X Y Z Type Name Tahun
66.666667 33.333333 0.000000 Percentage A 2021
4.0 2.0 0.0 Value A 2021
25.000000 62.500000 12.500000 Percentage A 2020
2.0 5.0 1.0 Value A 2020
我试过这个:
df = df.set_index('Status').T
但我没有像预期的那样得到 output。 如何更改列名的 rest?
stack
(百分比和值)+ unstack
(状态):
(df.set_index(['Name', 'Tahun', 'Status'])
.stack()
.unstack(level='Status')
.rename_axis(('Name', 'Tahun', 'Type'))
.reset_index())
Status Name Tahun Type X Y Z
0 A 2020 Percentage 25.000000 62.500000 12.5
1 A 2020 Value 2.000000 5.000000 1.0
2 A 2021 Percentage 66.666667 33.333333 0.0
3 A 2021 Value 4.000000 2.000000 0.0
或者只使用melt
和pivot
:
(df.melt(['Name', 'Tahun', 'Status'], var_name='Type')
.pivot('value', ['Name', 'Tahun', 'Type'], 'Status')
.reset_index()
.rename_axis(columns=None))
Name Tahun Type X Y Z
0 A 2020 Percentage 25.000000 62.500000 12.5
1 A 2020 Value 2.000000 5.000000 1.0
2 A 2021 Percentage 66.666667 33.333333 0.0
3 A 2021 Value 4.000000 2.000000 0.0
此代码融合 dataframe,以便合并Percentage
和Value
列并创建新的Type
列,然后将其旋转,以便Status
列值成为列。
如果有重复:
(df.melt(['Name', 'Tahun', 'Status'], var_name='Type')
.pivot_table('value', ['Name', 'Tahun', 'Type'], 'Status')
.reset_index()
.rename_axis(columns=None))
不同之处在于pivot_table
有一个aggfunc
参数,默认设置为mean
,所以如果有重复值,它会找到其他值的平均值,而pivot
没有那个参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.