Pandas,按多个分层列旋转 DataFrame

Pandas, Pivoting DataFrame By Multiple Hierarchical Columns

我正在关注

https://nikolaygrozev.wordpress.com/2015/07/01/reshaping-in-pandas-pivot-pivot-table-stack-and-unstack-explained-with-pictures/

但我面临着一个不同的旋转 DataFrame 的场景。

基本的枢轴命令是这样的:

d.pivot(index='Item', columns='CType', values='USD')

现在假设我的 'Item' 在另外两个数据列中属于两个类别 'Area''Region'。我希望旋转结果包含这三个级别 (Region, Area, Item)。我怎样才能做到这一点?

我一直在到处寻找答案,也一直在尝试 'unstack', 'droplevel', 'reset_index' 等方法,但无法让它们自己工作。

请帮忙。

谢谢

首先,您可能想使用 pd.pivot_table。其次,当你想在一个维度上有多个列时,你需要将它们作为列表传递(例如 index=['Item', 'Area', 'Region'])。

# Random data.
np.random.seed(0)
df = pd.DataFrame({'Area': ['A', 'A', 'A',  'B', 'B', 'B'], 
                   'Region': ['r', 's', 'r', 's', 'r', 'r'], 
                   'Item': ['car' ,'car', 'car', 'truck', 'bus', 'bus'], 
                   'CType': [3, 4, 3, 3, 5, 5], 
                   'USD': np.random.rand(6) * 100})

>>> df
  Area  CType   Item Region        USD
0    A      3    car      r  54.881350
1    A      4    car      s  71.518937
2    A      3    car      r  60.276338
3    B      3  truck      s  54.488318
4    B      5    bus      r  42.365480
5    B      5    bus      r  64.589411

>>> pd.pivot_table(df, 
                   index=['Item', 'Area', 'Region'], 
                   columns='CType', 
                   values='USD', 
                   aggfunc=sum)

CType                       3          4           5
Item  Area Region                                   
bus   B    r              NaN        NaN  106.954891
car   A    r       115.157688        NaN         NaN
           s              NaN  71.518937         NaN
truck B    s        54.488318        NaN         NaN