目标:我试图将多级索引中的每一行除以每组中的总数。
更具体地说:鉴于以下数据,我想将红色和蓝色大理石的数量除以每组中的总数(即日期,国家和颜色之和)
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']
答案 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