[英]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.