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

在Pandas中对降序日期列计算10日滚动平均值的问题

解决方案

要解决降序日期数据的前序滚动平均计算问题,核心是先调整数据顺序为升序(旧日期在前)计算滚动平均,再还原为降序排列,这样就能让NaN出现在数据集末尾(最旧日期),且代码简洁易扩展。

步骤1:确保日期列格式正确

先将日期列转换为datetime类型,避免排序出错:

import pandas as pd

# 假设日期列名为'date',根据实际情况修改
esdata['date'] = pd.to_datetime(esdata['date'])

步骤2:升序排序计算滚动平均

将数据按日期升序排列后,计算10日滚动平均(仅当有10个有效数据时才计算,否则返回NaN):

# 升序排序(旧日期在前)
esdata_sorted = esdata.sort_values('date', ascending=True)

# 计算10日滚动平均,min_periods=10确保必须有10个数据才返回结果
esdata_sorted['10d rolling'] = esdata_sorted['RoC ABS'].rolling(window=10, min_periods=10).mean()

步骤3:还原为降序排列

将计算好的数据重新按日期降序排列,此时NaN会出现在数据集末尾:

esdata = esdata_sorted.sort_values('date', ascending=False)

扩展到50日移动平均

只需修改window参数即可,代码逻辑完全一致:

esdata_sorted['50d rolling'] = esdata_sorted['RoC ABS'].rolling(window=50, min_periods=50).mean()
esdata = esdata_sorted.sort_values('date', ascending=False)

为什么原代码不符合需求?

你的原代码esdata["10d rolling"] = esdata["RoC ABS"].rolling(10).mean()默认是向前取窗口:在降序数据中,当前行是最新日期,向前取的是更晚的日期(而非前序日期),导致首行因数据不足出现NaN。通过先升序排序,滚动窗口会取当前日期之前的10个旧日期数据,还原降序后自然让NaN落在最旧的行(数据集末尾)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:01:47