Transpose Pandas Dataframe Python



我有以下数据框架:

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           

我想转换数据框并将列标题更改为Status值。理想情况下,输出应该看起来像

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

,但我没有得到我所期望的输出。如何更改其余的列名?

stack(Percentage and Value) +unstack(Status):

(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

或者直接使用meltpivot:

(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

这段代码融化了数据框,使PercentageValue列合并,并创建了一个新的列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没有这个参数。

最新更新