Pandas div 有多个索引

Pandas div with multiple index

我一直面临以下问题。我有一个具有多个索引的数据框(这里是三个):

df = pd.DataFrame(np.random.randint(2, 8, size = (8, 1)))
df.index = pd.MultiIndex.from_tuples([(1990, 'Women','type_A'), (1990, 'Women','type_B'),(1990, 'Men','type_A'), (1990, 'Men','type_B'), 
(1991, 'Women','type_A'), (1991, 'Women','type_B'),(1991, 'Men','type_A'), (1991, 'Men','type_B')])
df.index.names = ['Year', 'Gender','Type']
df.columns = ['Total']

看起来像:

                     Total
Year Gender Type         
1990 Women  type_A      5
            type_B      7
     Men    type_A      6
            type_B      2
1991 Women  type_A      2
            type_B      6
     Men    type_A      3
            type_B      5

我一直在尝试通过 Year 计算每个 TypeGender 的份额,但我没有在 SOF 上找到任何明确的答案。在一天结束时,我需要获得以下 df:

                     Share
Year Gender Type          
1990 Women  type_A  0.4166
            type_B  0.5833
     Men    type_A  0.7500
            type_B  0.2500
1991 Women  type_A  0.2500
            type_B  0.7500
     Men    type_A  0.3750
            type_B  0.6250

通常,我会使用 div 函数来完成它,但它似乎不适用于多个索引。有人遇到过类似情况吗?提前致谢 !

一种选择是按年份和性别计算总和,然后将原始数据框除以总和(结果略有不同,因为您没有为随机生成器设置种子):

df/df.groupby(level=[0, 1]).transform('sum')