我有以下資料框架:
狀態 百分比 數值 名稱 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 百分比 A 2021
4.0 2.0 0.0 值 A 2021
25.000000 62.500000 12.500000 百分比 A 2020
2.0 5.0 1.0價值A 2020
我試了這個:
df = df.set_index('Status').T
但是我沒有得到我所期望的輸出。我怎樣才能改變其余的列名呢?
uj5u.com熱心網友回復:
stack(百分比和值) unstack(狀態):
(df.set_index(['Name', 'Tahun', 'Status'])
.堆疊()
.unstack(level='Status')
.rename_axis(('Name'/span>, 'Tahun'/span>, 'Type'/span>)
.reset_index())
狀態名稱 Tahun Type X Y Z
0 A 2020 Percentage 25.000000 62.500000 12.5
1 A 2020 值 2.000000 5.000000 1.0
2 A 2021 Percentage 66.666667 33.333333 0.0
3 A 2021 值 4.000000 2.000000 0.0
uj5u.com熱心網友回復:
或者直接使用melt和pivot:
(df. melt(['Name'/span>, 'Tahun'/span>, 'Status'/span>], var_name='Type'/span>)
.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 值 2.000000 5.000000 1.0
2 A 2021 Percentage 66.666667 33.333333 0.0
3 A 2021 值 4.000000 2.000000 0.0
這段代碼融化了資料框架,使Percentage和Value列被合并,并創建了一個新的Type列,然后對其進行透視,使Status列值成為列。
如果有重復的內容:
(df. melt(['Name'/span>, 'Tahun'/span>, 'Status'/span>], var_name='Type'/span>)
.pivot_table('value', ['姓名', 'Tahun', '型別'], '狀態')
.reset_index()
.rename_axis(columns=None)
區別在于,pivot_table有一個aggfunc引數,默認設定為mean,所以如果有重復的值,它將找到其他值的平均值,而pivot沒有這個引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326404.html
標籤:
