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

Pandas按条件匹配行后对比后续多行计算价格差值方法

Pandas 按形态标识行计算后续N周期价格差实现方案

现有包含price(价格)、pattern(形态标识:0代表无目标形态,1代表存在目标形态)两列的DataFrame,示例数据如下:

price  pattern
0     10        0
1     12        1
2     15        0
3     11        0
4      9        0

需要仅对pattern=1的行完成两项差值计算:

  • 目标行价格与下1行价格的差值(下1行价格 - 目标行价格),存入新列diff_1_tf,用于后续统计均值、分析形态出现后的整体价格变动规律
  • 目标行价格与向后数第3行价格的差值(后第3行价格 - 目标行价格),存入新列diff_3_tf

方案1:shift向量化实现(推荐,性能最优)

你提到的shift函数完全适配这个场景,不需要写逐行循环,pandas向量化运算的执行效率比逐行迭代高1~2个数量级,实现逻辑:

  • df['col'].shift(-n)会将列整体向上平移n位,平移后每一行的取值,就是原列对应行向后数第n行的取值
  • 计算完全部行的差值后,仅保留pattern=1行的计算结果,其余行置为空值即可

完整代码:

# 复制源数据避免修改原表
new_df = df[['price', 'pattern']].copy()

# 生成后1行、后3行价格的对齐列
next_1_price = new_df['price'].shift(-1)
next_3_price = new_df['price'].shift(-3)

# 仅给形态标识为1的行赋值差值
new_df.loc[new_df['pattern'] == 1, 'diff_1_tf'] = next_1_price - new_df['price']
new_df.loc[new_df['pattern'] == 1, 'diff_3_tf'] = next_3_price - new_df['price']

示例数据运行后输出结果:

price  pattern  diff_1_tf  diff_3_tf
0     10        0        NaN        NaN
1     12        1        3.0       -3.0
2     15        0        NaN        NaN
3     11        0        NaN        NaN
4      9        0        NaN        NaN

后续做统计分析直接调用聚合方法即可:

# 统计形态出现后1周期的平均价格变动
avg_diff_1 = new_df['diff_1_tf'].mean()
# 统计形态出现后3周期的平均价格变动
avg_diff_3 = new_df['diff_3_tf'].mean()

方案2:iterrows逐行迭代实现

你提到的iterrows()结合索引定位也可以实现需求,适合习惯逐行写逻辑的场景,注意提前初始化新列,同时加索引越界判断避免最后几行无后续数据时报错:

new_df = df[['price', 'pattern']].copy()
# 初始化新列为空值
new_df[['diff_1_tf', 'diff_3_tf']] = pd.NA

for idx, row in new_df.iterrows():
    # 仅处理存在形态的行
    if row['pattern'] != 1:
        continue
    # 计算1周期差值,判断索引不越界
    if idx + 1 < len(new_df):
        new_df.loc[idx, 'diff_1_tf'] = new_df.loc[idx+1, 'price'] - row['price']
    # 计算3周期差值,判断索引不越界
    if idx + 3 < len(new_df):
        new_df.loc[idx, 'diff_3_tf'] = new_df.loc[idx+3, 'price'] - row['price']

注意:逐行迭代方案仅适合数据量10万行以内的小数据集,数据量较大时优先选shift向量化方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:06:22