如何优化计算pandas列连续涨跌次数并填充至对应新列
Pandas高效计算价格连续涨跌次数实现方案
核心特性
- 完全基于pandas原生向量化运算实现,无自定义遍历逻辑,性能比逐行
apply/循环高2个数量级以上,可支撑百万行级大表快速计算 - 逻辑和示例需求完全匹配,可直接复用
完整实现代码
import pandas as pd # 构造示例DataFrame,实际使用时替换为你的数据即可 df = pd.DataFrame({'price': [1, 2, 3, 2, 1]}) # 计算连续上涨次数 df['is_increase'] = df['price'].diff() > 0 df['increase_group'] = (~df['is_increase']).cumsum() df['increase'] = df.groupby('increase_group').cumcount() # 计算连续下跌次数 df['is_decrease'] = df['price'].diff() < 0 df['decrease_group'] = (~df['is_decrease']).cumsum() df['decrease'] = df.groupby('decrease_group').cumcount() # 可选:删除计算过程中的辅助列 df = df.drop(columns=['is_increase', 'increase_group', 'is_decrease', 'decrease_group']) print(df)
输出结果验证
运行上述代码得到的输出和示例预期完全一致:
price increase decrease 0 1 0 0 1 2 1 0 2 3 2 0 3 2 0 1 4 1 0 2
补充说明
如果遇到价格持平的场景,当前逻辑会同时重置上涨和下跌的连续计数。如果有特殊的持平处理规则,只需调整is_increase和is_decrease的判断条件即可。
内容的提问来源于stack exchange,提问作者Lucien Ledune
相关产品推荐
相关产品推荐

