[英]Python Pandas- how to unstack a pivot table with two values with each value becoming a new column?
在使用以下兩個值旋轉數據框后:
import pandas as pd
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'bar'],
'B' : ['one', 'one', 'two', 'two',
'two', 'two', 'one', 'two'],
'C' : [56, 2, 3, 4, 5, 6, 0, 2],
'D' : [51, 2, 3, 4, 5, 6, 0, 2]})
pd.pivot_table(df, values=['C','D'],rows='B',cols='A').unstack().reset_index()
當我拆開數據透視圖並重置索引時,將創建兩個新列“ level_0”和0。 Level_0包含列名C和D,0包含值。
level_0 A B 0
0 C bar one 2.0
1 C bar two 4.0
2 C foo one 28.0
3 C foo two 4.0
4 D bar one 2.0
5 D bar two 4.0
6 D foo one 25.5
7 D foo two 4.0
是否可以拆開框架,使每個值(C,D)出現在單獨的列中,或者我必須拆分並連接框架才能實現此目的? 謝謝。
編輯以顯示所需的輸出:
A B C D
0 bar one 2 2
1 bar two 4 4
2 foo one 28 25.5
3 foo two 4 4
您要stack
(而不是堆疊):
In [70]: pd.pivot_table(df, values=['C','D'],rows='B',cols='A').stack()
Out[70]:
C D
B A
one bar 2 2.0
foo 28 25.5
two bar 4 4.0
foo 4 4.0
雖然unstack
你使用做了一個“堆”操作,因為你在指數線(僅在列軸)無多指標。
但是實際上,您還可以通過groupby-operation到達那里(並且我認為更合乎邏輯),因為這是您實際上所做的(將C和D列按A和B分組):
In [72]: df.groupby(['A', 'B']).mean()
Out[72]:
C D
A B
bar one 2 2.0
two 4 4.0
foo one 28 25.5
two 4 4.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.