Python 数据框按列分组并用百分比创建新列

Python dataframe group by column and create new column with percentage

我有一个模拟数据框的场景,如下所示:

    Month  Amount  
1   Jan     260
2   Feb    179
3   Mar    153
4   Apr    142
5   May    128
6   Jun    116
7   Jul    71
8   Aug    56
9   Sep    49
10  Oct    17
11  Nov    0
12  Dec    0

我正在尝试通过使用数据框分组依据计算每行的百分比并使用如下 lambda 函数来获取新列:

 df = pd.DataFrame(mylistofdict)
 df = df.groupby('Month')["Amount"].apply(lambda x: x / x.sum()*100)

但我没有得到仅低于 2 列的预期结果:

    Month   Percentage
1   Jan         22%
2   Feb         15%
3   Mar         13%
4   Apr         12%
5   May         11%
6   Jun         10%
7   Jul         6%
8   Aug         5%
9   Sep         4%
10  Oct         1%
11  Nov         0
12  Dec         0

我该如何修改我的代码,或者有什么比使用 dataframe 更好的方法吗?

如果 Month 的值是唯一的,请使用:

df['perc'] = df["Amount"] / df["Amount"].sum() * 100
print (df)
   Month  Amount       perc
1    Jan     260  22.203245
2    Feb     179  15.286080
3    Mar     153  13.065756
4    Apr     142  12.126388
5    May     128  10.930828
6    Jun     116   9.906063
7    Jul      71   6.063194
8    Aug      56   4.782237
9    Sep      49   4.184458
10   Oct      17   1.451751
11   Nov       0   0.000000
12   Dec       0   0.000000

如果 Month 的值重复,我认为可以使用:

print (df)
   Month  Amount
1    Jan     260
1    Jan     100
3    Mar     153
4    Apr     142
5    May     128
6    Jun     116
7    Jul      71
8    Aug      56
9    Sep      49
10   Oct      17
11   Nov       0
12   Dec       0


df = df.groupby('Month', as_index=False, sort=False)["Amount"].sum()
df['perc'] = df["Amount"] / df["Amount"].sum() * 100
print (df)
   Month  Amount       perc
0    Jan     360  32.967033
1    Mar     153  14.010989
2    Apr     142  13.003663
3    May     128  11.721612
4    Jun     116  10.622711
5    Jul      71   6.501832
6    Aug      56   5.128205
7    Sep      49   4.487179
8    Oct      17   1.556777
9    Nov       0   0.000000
10   Dec       0   0.000000