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

Python pandas按ID分组求和后扣除同ID_C其他行值计算新列

Pandas 实现同组排除当前行的聚合计算方案

逻辑拆解

需求可通过pandas原生向量化分组操作实现,不需要逐行遍历,性能高且代码易维护,核心逻辑可做公式简化,避免复杂的"排除自身"操作:

  • 同ID_B+ID_C子组内,除当前行外的其余行Value总和 = 该子组所有行的Value总和 - 当前行自身的Value
  • 目标列Value_Sum_New = 已有的ID_B_Value_Sum - 上述其余行Value总和

等价简化公式:
Value_Sum_New = ID_B_Value_Sum - (按ID_B、ID_C分组的Value总和 - 当前行Value)

完整实现代码

import pandas as pd

# --------------- 构造示例数据 ---------------
data = [
    [22,5,1,54,208],[23,5,2,34,208],[24,6,1,44,268],[25,6,1,64,268],[26,5,2,35,208],
    [27,7,3,45,229],[28,7,2,66,229],[29,8,1,76,161],[30,8,2,25,161],[31,6,2,27,268],
    [32,5,3,14,208],[33,5,3,17,208],[34,6,2,43,268],[35,6,2,53,268],[36,8,1,22,161],
    [37,7,3,65,229],[38,7,1,53,229],[39,8,2,23,161],[40,8,3,15,161],[41,6,3,37,268],
    [42,5,2,54,208]
]
df = pd.DataFrame(data, columns=['ID_A','ID_B','ID_C','Value','ID_B_Value_Sum'])

# --------------- 核心计算逻辑(仅2行)---------------
# 计算ID_B+ID_C子组的Value总和,用transform广播到每一行
df['subgroup_total'] = df.groupby(['ID_B','ID_C'])['Value'].transform('sum')
# 套用简化公式计算目标列
df['Value_Sum_New'] = df['ID_B_Value_Sum'] - (df['subgroup_total'] - df['Value'])

# 可选:删除临时辅助列
df = df.drop(columns=['subgroup_total'])

# 打印结果验证
print(df)

结果验证

运行代码后给出的3个示例行计算结果完全匹配预期:

  • 索引2(ID_A=24):Value_Sum_New=204
  • 索引4(ID_A=26):Value_Sum_New=120
  • 索引7(ID_A=29):Value_Sum_New=139

补充:如果还没有预计算ID_B_Value_Sum列,也可以用同样的分组逻辑直接生成:df['ID_B_Value_Sum'] = df.groupby('ID_B')['Value'].transform('sum'),不需要额外写聚合逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:09:20