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

如何用Pandas实现带条件的GroupBy累加计算Net列?

解决方案

直接通过条件计算+分组累加的链式操作就能完成需求,不需要拆分步骤单独处理:

  1. 先根据tag的规则计算每行的基础数值
  2. 按rep分组后对基础数值做逐行累加(cumsum)

完整代码示例

import pandas as pd
import numpy as np

# 构造原始数据(示例)
df = pd.DataFrame({
    'rep': ['A', 'A', 'B', 'B', 'B'],
    'tag': [1, 2, 1, 3, 2],
    'profit': [100, 0, 150, 0, 0],
    'cost': [20, 30, 40, 50, 10]
})

# 一步生成Net列
df['Net'] = np.where(
    df['tag'] == 1, 
    df['profit'] - df['cost'], 
    -df['cost']
).groupby(df['rep']).cumsum()

print(df)

运行结果

rep  tag  profit  cost   Net
0   A    1     100    20   80
1   A    2       0    30   50
2   B    1     150    40  110
3   B    3       0    50   60
4   B    2       0    10   50

补充说明

如果习惯用loc分步赋值,也可以这样写:

# 初始化Net列
df['Net'] = 0
# 条件赋值
df.loc[df['tag'] == 1, 'Net'] = df['profit'] - df['cost']
df.loc[df['tag'] > 1, 'Net'] = -df['cost']
# 分组累加
df['Net'] = df.groupby('rep')['Net'].cumsum()

两种方法效果一致,np.where的方式代码更紧凑,处理大数据量时效率也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:51:30