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

Pandas DataFrame指定子集滚动标准差实现方案问询

解决DataFrame反向滚动标准差的问题

这问题我之前也碰到过,Pandas的rolling默认是按索引从小到大的方向计算窗口统计,刚好和你的需求(索引0为最新数据,要取当前行+时间更早的14行)反过来,给你两个简单可行的实现方案:

方案1:反转列计算后再反转回来

核心思路是先把ratio_div列的顺序反转,让旧数据在前、新数据在后,这样常规的rolling(window=15)就会计算连续15个旧数据+当前新数据的窗口,最后再把结果反转回原顺序即可:

# 反转ratio_div列,计算滚动标准差,再反转回原顺序
df['SD1'] = df['ratio_div'][::-1].rolling(window=15, min_periods=15).std()[::-1]
  • df['ratio_div'][::-1]:将列反转,把最旧数据放到第一位,最新数据放到最后一位
  • rolling(window=15, min_periods=15):计算窗口大小为15的滚动标准差,要求必须有15个非NaN值才计算(避免前14行出现无效结果)
  • [::-1]:将计算结果反转,还原到原数据的索引顺序

方案2:利用shift调整滚动结果的位置

另一种思路是先计算正向的滚动标准差,再通过shift把结果移动到对应的位置:

# 先计算正向15行窗口的标准差,再将结果向前移动14位
df['SD1'] = df['ratio_div'].rolling(window=15, min_periods=15).std().shift(-14)
  • rolling(window=15, min_periods=15).std():计算索引i对应的窗口是i-14到i的标准差(比如索引14对应窗口0-14)
  • .shift(-14):将每个位置的结果向前移动14位,这样索引14的结果就会到索引0的位置,刚好对应你需要的“当前行(0)+前14行(1-14)”的标准差

灵活调整说明

如果你的200行数据中,希望最后14行(索引186到199)即使不足15行也计算标准差,可以把min_periods参数改成1,这样会用现有数据计算;如果严格要求必须15行才出结果,保持min_periods=15即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:38:17