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

Posted

技术标签:

【中文标题】根据另一列计算 groupby 中的百分比【英文标题】:Calculate percentages in groupby, based on another column 【发布时间】:2021-09-13 10:25:57 【问题描述】:

我有一张这样的桌子:

Month Binary 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 列的百分比。我希望得到:

Month Binary 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

谢谢!

【问题讨论】:

你可能忘了说,你想按月分组? 是的。对于 Value_missing 列中的每个单元格,我想除以 Total_Value 按月的总和 【参考方案1】:

这是一种方法:

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)

【讨论】:

以上是关于根据另一列计算 groupby 中的百分比的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:根据另一列的百分比增长率创建一个新列

用于计算同一列的值百分比的 SQL [关闭]

根据 s-s-rS 中另一列的值更改数字格式

如何添加百分比列

python使用pandas中的groupby函数和agg函数计算每个分组数据的两个分位数(例如百分之10分位数和百分之90分位数)

计算 Power Pivot 模型中总计的百分比