You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Pandas中实现类似Excel SUMIF的分组占比列计算

如何在Pandas中实现类似Excel SUMIF的百分比计算?

刚好处理过类似需求,用Pandas的groupby配合transform就能完美复刻Excel里SUMIF的逻辑,步骤很清晰:

首先先把你的示例数据构造出来(方便复现验证):

import pandas as pd

df = pd.DataFrame({
    'pet': ['cat', 'dog', 'snek', 'cat', 'dog'],
    'treats': [2, 1, 3, 6, 1],
    'lbs': [5.0, 9.9, 1.1, 4.5, 9.4]
})

接下来核心操作分两步:

  • 第一步:按pet分组,计算每个组的treats总和,用transform方法确保结果和原DataFrame的行数、索引完全匹配(这一步就对应Excel里SUMIF(A:A,A1,B:B)找对应组总和的逻辑)
  • 第二步:用每行的treats除以对应组的总和,再乘以100得到百分比

具体代码如下:

# 计算每个宠物类型的treats总和,并广播到组内每一行
pet_total_treats = df.groupby('pet')['treats'].transform('sum')

# 新增percentage列,计算百分比
df['percentage'] = (df['treats'] / pet_total_treats) * 100

运行后你会得到这样的结果:

pettreatslbspercentage
0cat25.025.0
1dog19.950.0
2snek31.1100.0
3cat64.575.0
4dog19.450.0

如果需要控制小数位数(比如保留两位),可以加个round方法:

df['percentage'] = (df['treats'] / pet_total_treats * 100).round(2)

简单说,transform是这里的关键——它不像普通的groupby.sum()只返回每个组的单个值,而是把这个值填充到组内的每一行,这样就能和原数据的每行一一对应,完全实现你要的Excel公式效果。

内容的提问来源于stack exchange,提问作者Jackie

火山引擎 最新活动