Python 如何获得大熊猫多指标df中各组的贡献百分比?

Python 如何获得大熊猫多指标df中各组的贡献百分比?,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我的df如下所示: 年份和大陆是指数。hydro_total是一列 我想增加一个专栏,在给定的一年里,该专栏将占非洲大陆的一定比例 例如: 1971年,非洲有2.04笔捐款,美国有48.56笔捐款,亚洲、欧洲和大洋洲也是如此。 这将在每年重复 以下是数据: {'hydro_total': {(1971, 'Africa'): 1861980.0, (1971, 'America'): 44127920.0, (1971, 'Asia'): 14514450.0, (1971, 'E

我的df如下所示:

年份和大陆是指数。hydro_total是一列

我想增加一个专栏,在给定的一年里,该专栏将占非洲大陆的一定比例

例如: 1971年,非洲有2.04笔捐款,美国有48.56笔捐款,亚洲、欧洲和大洋洲也是如此。 这将在每年重复

以下是数据:

{'hydro_total': {(1971, 'Africa'): 1861980.0,
  (1971, 'America'): 44127920.0,
  (1971, 'Asia'): 14514450.0,
  (1971, 'Europe'): 28232850.0,
  (1971, 'Oceania'): 2126000.0,
  (1972, 'Africa'): 2300750.0,
  (1972, 'America'): 47242190.0,
  (1972, 'Asia'): 14970150.0,
  (1972, 'Europe'): 29427610.0,
  (1972, 'Oceania'): 2225000.0}}

如果我理解正确:

df['contribution'] = df.groupby(level=0)['hydro_total'] \
                       .transform(lambda g: g / g.sum()) * 100
结果:

              hydro_total  contribution
1971 Africa     1861980.0      2.049212
     America   44127920.0     48.565228
     Asia      14514450.0     15.973959
     Europe    28232850.0     31.071820
     Oceania    2126000.0      2.339781
1972 Africa     2300750.0      2.392485
     America   47242190.0     49.125821
     Asia      14970150.0     15.567037
     Europe    29427610.0     30.600942
     Oceania    2225000.0      2.313715

对这就是我需要的。谢谢实际上,我有一个包含更多列的df。如何指定lambda函数以仅对hydro_total列应用转换。您可以在
groupby
之后指定列名。见我编辑的答案