如何高效计算符号变化时重置的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的向量化操作就能高效实现,步骤如下:
- 计算
diff列的符号值 - 识别符号变化的位置,生成分组标识
- 按分组对
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
相关产品推荐
相关产品推荐

