You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas分组条件求和:新增TYPE为A/B的分组求和列

解决方案:新增TOT_AB列计算指定TYPE的分组求和

要实现按IDS分组,仅对TYPE为A或B的CR_EARNED求和并生成TOT_AB列,这里有两种简洁且易理解的方法,和你生成TOT_ALL_TYPES的思路一脉相承:

方法一:临时列辅助法(直观易懂)

先给符合条件的行标记出有效CR_EARNED值,再分组求和映射回原表:

# 创建临时列,仅保留TYPE为A/B的CR_EARNED,其余设为0
df['CR_AB_temp'] = df.apply(lambda row: row['CR_EARNED'] if row['TYPE'] in ['A', 'B'] else 0, axis=1)
# 按IDS分组求和临时列,生成目标TOT_AB
df['TOT_AB'] = df['CR_AB_temp'].groupby(df['IDS']).transform('sum')
# 可选:删除临时列,保持表结构整洁
df = df.drop('CR_AB_temp', axis=1)

方法二:直接分组筛选法(更简洁)

不需要临时列,直接在分组后对每组内符合条件的行求和:

df['TOT_AB'] = df.groupby('IDS')['CR_EARNED'].transform(
    lambda x: x[df.loc[x.index, 'TYPE'].isin(['A', 'B'])].sum()
)

最终效果验证

运行任意一种方法后,你的DataFrame会得到期望的结果:

IDS CR_EARNED TYPE TOT_ALL_TYPES TOT_AB
001 3 A 7 7
001 3 A 7 7
001 1 B 7 7
002 3 A 6 6
002 3 A 6 6
003 2 C 8 2
003 4 C 8 2
003 2 A 8 2

举个例子:IDS=003的分组里只有TYPE为A的行(CR_EARNED=2)符合条件,所以TOT_AB的值为2,所有同IDS的行都会映射这个求和结果。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:20:49