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

Pandas无需for循环利用前X行数据定义新列实现Doji指标

Pandas实现Doji指标无循环方案

核心思路

用Pandas滚动窗口(rolling)替代手动遍历/多shift调用,全向量化操作完全匹配原有逻辑,性能远高于for循环。

实现步骤

  • 先计算每根K线的实体高度:实体高度 = |收盘价 - 开盘价|
  • 用滚动窗口计算当前行之前20个实体高度的均值,通过closed='left'参数排除当前行,完全匹配原有逻辑的取值范围
  • 用numpy.where()单条语句完成条件判断,生成isDoji标记列

完整代码示例

import pandas as pd
import numpy as np

# 假设你的行情DataFrame变量名为df,包含open、close列
# 1. 计算实体高度
df['body_height'] = abs(df['close'] - df['open'])

# 2. 计算前20行实体高度的均值(不包含当前行)
df['prev_20_body_avg'] = df['body_height'].rolling(window=20, closed='left').mean()

# 3. 单行生成isDoji标记,和原for循环结果完全一致
df['isDoji'] = np.where(df['body_height'] <= df['prev_20_body_avg'] * 0.05, True, False)

# 可选:前20行无足够历史数据,填充为False
df['isDoji'] = df['isDoji'].fillna(False)

逻辑一致性说明

rolling(window=20, closed='left')会为第N行(索引从0开始)计算[N-20, N-1]区间的均值,完全等价于遍历到第N行时取前20行计算的逻辑,无任何偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:36:03