如何用Pandas实现带条件的GroupBy累加计算Net列?
解决方案
直接通过条件计算+分组累加的链式操作就能完成需求,不需要拆分步骤单独处理:
- 先根据
tag的规则计算每行的基础数值 - 按
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
相关产品推荐
相关产品推荐

