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

pandas用cumsum多条件累计求和及SettingWithCopyWarning问题解决

问题解答

1 使用cumsum()实现多条件累计求和

无需嵌套循环,直接用pandas分组+条件筛选的原生语法即可实现需求,代码如下:

import pandas as pd
import numpy as np

# 转换AMOUNT列为数值类型
df['AMOUNT'] = pd.to_numeric(df['AMOUNT'])
# 筛选TYPE为BUY的行,按NAME分组后对AMOUNT做组内累计求和
df['ACCUMULATE'] = df[df['TYPE'] == 'BUY'].groupby('NAME')['AMOUNT'].cumsum()
# 将SELL行的NaN值替换为空字符串,匹配预期输出格式
df['ACCUMULATE'] = df['ACCUMULATE'].fillna('').astype(str)

运行上述代码得到的结果和你给出的预期效果完全一致,且在数据量较大时运行效率远高于嵌套循环实现。

2 SettingWithCopyWarning警告的原因与解决方法

产生原因

该警告是pandas的安全提示,触发原因是你使用了链式索引操作:df.ACCUMULATE.iloc[counter] 属于连续两次索引取值,pandas无法确定本次操作返回的是原始数据的视图还是副本,怕你修改了副本但没有改动到原始数据,因此抛出警告提醒你确认操作有效性。

解决方法

  • 优先修改索引写法:赋值时统一用.loc同时指定行和列,避免链式操作,示例写法为 df.loc[counter, 'ACCUMULATE'] = cumulativeValue
  • 显式生成数据副本:如果确定操作对象是独立的新DataFrame,可以在创建时加.copy(),示例:df = pd.DataFrame(...).copy(),从根源避免视图和副本的歧义
  • 不推荐方案:如果确认操作逻辑无误,也可以手动关闭该警告:pd.set_option('mode.chained_assignment', None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:27:00