熊猫 - 多指数分部[即分组]

时间:2016-09-01 09:01:15

标签: python pandas

目标:我试图将多级索引中的每一行除以每组中的总数。

更具体地说:鉴于以下数据,我想将红色和蓝色大理石的数量除以每组中的总数(即日期,国家和颜色之和)

                         Number
 Date  Country   Colour     
 2011    US      Red      4
                 Blue     6
 2012    IN      Red      9
         IE      Red      5
                 Blue     5
 2013    JP      Red      15
                 Blue     25

这将给出以下答案:

                         Number
 Date  Country   Colour     
 2011    US      Red      0.4
                 Blue     0.6
 2012    IN      Red      1.0
         IE      Red      0.5
                 Blue     0.5
 2013    JP      Red      0.375
                 Blue     0.625

以下是重现数据的代码:

arrays = [np.array(['2011', '2011', '2012', '2012', '2012', '2013', '2013']),
np.array(['US', 'US', 'IN', 'IE', 'IE', 'JP', 'JP', 'GB']),
np.array(['Red', 'Blue', 'Red', 'Red', 'Blue', 'Red', 'Blue', 'Blue'])]

df = pd.DataFrame(np.random.rand(7, 1)*10, index=arrays, columns=['number'])
df.index.names = ['Date', 'Country', 'Colour']

1 个答案:

答案 0 :(得分:3)

较短的版本是:

df.groupby(level=['Date', 'Country']).transform(lambda x: x/x.sum())

                     number
Date Country Colour        
2011 US      Red      0.400
             Blue     0.600
2012 IN      Red      1.000
     IE      Red      0.500
             Blue     0.500
2013 JP      Red      0.375
             Blue     0.625