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

如何按类别(category)分组、按日期计算过去4个月的滚动标准差(rolling standard deviation)?代码调试求助

解决按类别计算过去4个月滚动标准差的问题

首先得指出你当前代码的两个明显问题:

  • 语法错误:groupby(['date', 'category')里的括号不匹配,正确写法应该是groupby(['date', 'category'])
  • 逻辑偏差:这个写法是计算每个(date, category)组合的整体标准差,完全不是你想要的「过去4个月的滚动标准差」

接下来给你正确的实现思路和代码:

步骤1:确保日期列是datetime类型

pandas的时间滚动窗口依赖datetime格式的日期,所以先把date列转成标准时间格式:

import pandas as pd

# 转换日期格式
df['date'] = pd.to_datetime(df['date'])

步骤2:按类别分组计算滚动标准差

我们需要对每个category单独处理,用时间窗口'4M'表示过去4个月,然后计算指定数值列的滚动标准差:

# 假设你要计算标准差的数值列名为'value',替换成你实际的列名
df['std'] = df.groupby('category').apply(
    lambda group: group.set_index('date')['value'].rolling('4M').std()
).reset_index(level=0, drop=True)

或者更简洁的写法(先设置日期为索引):

df = df.set_index('date')
df['std'] = df.groupby('category')['value'].rolling('4M').std().reset_index(level=0, drop=True)
df = df.reset_index()  # 如果需要把date列放回普通列

关键细节说明

  • rolling('4M')会自动识别自然月的时间窗口,不管每个月的天数差异,都严格计算过去4个月的范围
  • 如果你的数据有缺失值,或者希望窗口内至少有N个数据才计算标准差,可以加min_periods参数,比如rolling('4M', min_periods=2)
  • 务必替换代码里的'value'为你实际要计算标准差的数值列名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:27:35