Pandas,通过多个分层列透视数据框架

时间:2015-12-08 18:49:56

标签: python pandas pivot dataframe

我跟随

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

但我正面临着一种不同的方式来转动DataFrame。

基本的pivot命令是这样的:

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

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

我一直在寻找各地的答案,并且一直在尝试'unstack', 'droplevel', 'reset_index'等方法,但却无法让自己发挥作用。

请帮忙。

由于

1 个答案:

答案 0 :(得分:1)

首先,您可能想要使用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