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

Pandas滚动窗口内元素比较运算实现求助

解决方案

直接使用pd.rolling().apply()配合自定义函数即可实现需求,核心是在函数中完成窗口内的元素比较与求和逻辑,注意开启raw=True以提升处理效率。

完整代码

import pandas as pd

df = pd.DataFrame([
    [2, 3, 5, 7,],
    [8, 3, 6, 1],
    [1, 5, 9, 13],
    [7, 3, 2, 7],
    [12, 4, 1, 0]
])

def rolling_compare_sum(window):
    # 窗口长度不足4时返回NaN
    if len(window) < 4:
        return float('nan')
    last_val = window[-1]
    # 按规则生成比较结果并求和
    return sum([-1 if last_val > x else 1 for x in window[:-1]])

# 对每列应用长度为4的滚动窗口计算
result = df.rolling(window=4, raw=True).apply(rolling_compare_sum)

# 若需要整数格式(保留NaN),可转换为可空整数类型
# result = result.astype('Int64')

print(result)

输出结果

0    1    2    3
0       NaN  NaN  NaN  NaN
1       NaN  NaN  NaN  NaN
2       NaN  NaN  NaN  NaN
3      -1.0  3.0  3.0  1.0
4      -3.0 -1.0  3.0  3.0

逻辑说明

  1. 自定义函数rolling_compare_sum:
    • 先判断窗口长度,不足4直接返回NaN
    • 提取窗口最后一个元素作为比较基准
    • 遍历窗口前3个元素,按规则生成-1或1,最后求和返回
  2. 滚动窗口应用:
    • window=4指定滚动窗口长度
    • raw=True让Pandas直接传入NumPy数组而非Series,避免索引干扰并提升速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:05:08