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

Python如何基于DataFrame指定列条件实现对应值的累计求和

解决方案

报错原因

你原来的代码data['SumA'] = data['Quantity'].cumsum() if data[(data['Type'] == 'A')]报错是因为Python原生if语句仅支持判断标量布尔值,而data[(data['Type'] == 'A')]返回的是布尔索引筛选后的Series/数据框,无法直接作为if的判断条件,也不能实现逐行条件判断的逻辑。

实现代码

方法1:手动指定要累计的类型(适合类型少的场景)

核心逻辑是:把非目标类型的行对应的数量替换为0,再做累计求和,非目标行加0就会自动保留上一个累计值。

import pandas as pd

# 构造测试数据
data = pd.DataFrame({
    'Type': ['A', 'B', 'B', 'A'],
    'Quantity': [30, 10, 5, 3]
})

# 分别计算各类型的累计和
data['Sum A'] = data['Quantity'].where(data['Type'] == 'A', 0).cumsum()
data['Sum B'] = data['Quantity'].where(data['Type'] == 'B', 0).cumsum()

运行后得到的结果和你期望的完全一致。

方法2:自动生成所有类型的累计列(适合类型多的场景)

如果Type列的取值很多,不需要逐个手写,用独热编码批量处理即可:

import pandas as pd

data = pd.DataFrame({
    'Type': ['A', 'B', 'B', 'A'],
    'Quantity': [30, 10, 5, 3]
})

# 生成类型独热编码,乘以对应数量后累计求和
type_dummies = pd.get_dummies(data['Type'])
sum_cols = type_dummies.mul(data['Quantity'], axis=0).cumsum().add_prefix('Sum ')
data = pd.concat([data, sum_cols], axis=1)

内容的提问来源于stack exchange,提问作者Sara.SP92

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:45:03