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

如何使用Pandas.groupby实现跨两列同值的累计求和计算

Pandas 跨两列分组累计求和实现方案

直接计算法(适用于固定少量类别场景)

无需分组操作,直接通过向量化运算实现,执行效率更高:

import pandas as pd

# 初始数据构造
df = pd.DataFrame({
    'col_A': ['red', 'red', 'blue', 'red'], 
    'col_B': ['blue', 'red', 'blue', 'red'], 
    'col_A_qty': [1, 1, 1, 1], 
    'col_B_qty': [1, 1, 1, 1]
})

# 计算每行对应颜色的新增数量
df['red_add'] = (df['col_A'] == 'red') * df['col_A_qty'] + (df['col_B'] == 'red') * df['col_B_qty']
df['blue_add'] = (df['col_A'] == 'blue') * df['col_A_qty'] + (df['col_B'] == 'blue') * df['col_B_qty']

# 累计求和
df['red_cumsum'] = df['red_add'].cumsum()
df['blue_cumsum'] = df['blue_add'].cumsum()

# 清理临时列
df.drop(columns=['red_add', 'blue_add'], inplace=True)

groupby 通用方案(适用于多类别场景)

如果颜色类别较多,可通过数据重塑+分组累计求和实现,满足你要求使用pandas.groupby的需求:

import pandas as pd

df = pd.DataFrame({
    'col_A': ['red', 'red', 'blue', 'red'], 
    'col_B': ['blue', 'red', 'blue', 'red'], 
    'col_A_qty': [1, 1, 1, 1], 
    'col_B_qty': [1, 1, 1, 1]
})

# 生成行索引用于后续合并
df['row_id'] = df.index

# 宽表转长表,把两列颜色统一到同一列处理
long_df = pd.melt(
    df, 
    id_vars=['row_id'], 
    value_vars=['col_A', 'col_B'],
    var_name='col_flag',
    value_name='color'
)

# 匹配对应列的数量
long_df['qty'] = long_df.apply(lambda x: df.loc[x['row_id'], f"{x['col_flag']}_qty"], axis=1)

# 按颜色分组计算累计求和,再转回宽表
cumsum_res = long_df.groupby('color')['qty'].cumsum()\
    .groupby([long_df['row_id'], long_df['color']]).last()\
    .unstack(fill_value=0).groupby(level=0).last()\
    .add_suffix('_cumsum')

# 合并回原表
df = df.join(cumsum_res, on='row_id').drop(columns='row_id')

上述两种方法输出结果均和你期望的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:54:03