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

如何高效计算符号变化时重置的diff列累积和(生成cond_sum列)

高效计算符号变化时重置的累积和

先看你的原始数据构造代码:

import pandas as pd
my_df = pd.DataFrame({'col_1': [1,2,5,6,4,3,7,8,9,11,14]})
my_df['diff'] = my_df['col_1'].diff()
my_df['cond_sum'] = [None, 1,4,5,-2,-3,4,5,6,8,11]

需求是:计算diff列的累积和,每当diff的符号(正/负)发生变化时,累积和重置。

不用逐行循环,用pandas的向量化操作就能高效实现,步骤如下:

  1. 计算diff列的符号值
  2. 识别符号变化的位置,生成分组标识
  3. 按分组对diff列做累积和

完整实现代码:

import numpy as np

# 计算diff的符号(NaN会保留)
signs = np.sign(my_df['diff'])

# 标记符号变化的行(包括从NaN到非NaN的首次变化)
change_flag = signs.ne(signs.shift())

# 生成分组ID,每次符号变化时分组递增
group_ids = change_flag.cumsum()

# 按分组计算累积和,得到目标列
my_df['cond_sum_eff'] = my_df.groupby(group_ids)['diff'].cumsum()

运行后cond_sum_eff列会和你手动设置的cond_sum完全一致。这种方法用pandas内置的分组和累积和函数,都是底层优化的向量化操作,比逐行循环效率高得多,数据量越大优势越明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:50:40