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

为何Pandas中rolling(50)与rolling("50D")均值计算结果不同?

Pandas中rolling("50D")滚动均值的计算逻辑与差异解释

核心差异先明确

  • rolling(50).mean():按数据条数取窗口,固定取当前行及之前的50条数据计算均值,完全不考虑这些数据对应的日期间隔。
  • rolling("50D").mean():按时间跨度取窗口,以当前行的日期索引为基准,取过去50天内的所有数据计算均值,前提是你的数据索引为DatetimeIndex类型。

rolling("50D")的具体计算逻辑

  1. 索引校验:首先确认数据索引是日期时间类型,否则无法使用时间窗口参数。
  2. 时间区间划定:对每行数据,以其索引日期为终点,往前推50天作为起点,得到闭合时间区间:[当前日期 - 50天, 当前日期]。
  3. 数据筛选:将所有索引落在这个时间区间内的行筛选出来,不管这些行是否连续,也不管最终筛选出的条数是多少。
  4. 均值计算:对筛选出的所有数据计算均值,结果对应当前行的滚动均值。

为什么会和rolling(50).mean()结果不同?

当你的数据是非连续日期(比如A股交易日数据,周末、节假日无数据):

  • rolling(50).mean()取的50条数据,对应的时间跨度肯定超过50天(因为中间有日期缺失)。
  • rolling("50D").mean()只取50天内的所有数据,实际条数可能少于50条(比如50天内只有45个交易日)。

举个具体例子:
假设当前行日期是2024-06-01,往前50天是2024-04-12。如果这段时间内因为节假日只有45条交易数据,rolling("50D").mean()就用这45条计算;而rolling(50).mean()会取当前行及之前的50条数据,对应的日期可能要追溯到2024-03月底,时间跨度远大于50天。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:05:53