根据另一列计算 groupby 中的百分比

时间:2021-07-01 10:40:35

标签: python pandas pandas-groupby aggregate-functions percentage

我有一张像:

<头>
二进制 Value_missing Total_value
1 N 40 120
1 Y 5 50
2 N 30 200
2 Y 10 20

我想在 Pandas 中计算一个 groupby,它根据 Total_value 给我列 Value_missing 的百分比。我希望得到:

<头>
二进制 Value_missing Total_value %_Value_missing
1 N 40 120 0,235
1 Y 5 50 0,029
2 N 30 200 0,1363
2 Y 10 20 0,045

对于 Value_missing 列中的每一行/单元格,我想除以按月聚合的 Total_Value 的总和

第一行的微积分示例:40 / (120 + 50) = 0,235

谢谢!

1 个答案:

答案 0 :(得分:3)

这是一种方法:

df['%_Value_missing'] = df['Value_missing'].div(df.groupby('Month')['Total_value'].transform(sum))

替代方案:

df['%_Value_missing'] = df.groupby('Month').apply(lambda x: x['Value_missing'] / x['Total_value'].sum()).values

输出:

   Month Binary  Value_missing  Total_value  %_Value_missing
0      1      N             40          120         0.235294
1      1      Y              5           50         0.029412
2      2      N             30          200         0.136364
3      2      Y             10           20         0.045455

一些性能比较:

%%timeit
df['Value_missing'].div(df.groupby('Month')['Total_value'].transform(sum))
541 µs ± 19.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
df.groupby('Month').apply(lambda x: x['Value_missing'] / x['Total_value'].sum()).values
1.55 ms ± 4.61 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)