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

Pandas滚动窗口自定义聚合函数的命名实现方法咨询

问题原因与解决方案

你遇到的报错为Pandas版本兼容性导致:Pandas 1.3版本之前,Rolling.aggregate()/Rolling.agg()方法不支持和groupby.agg()一致的命名传参语法(包括pd.NamedAgg、关键字参数传(列, 聚合函数)元组两种写法),传入的关键字参数无法被识别,因此触发缺少func位置参数的错误。

方案1:升级Pandas版本(推荐)

升级到Pandas 1.3及以上版本后,你原本的两种写法都可以正常运行,无需修改代码。
查看当前Pandas版本的命令:

import pandas as pd
print(pd.__version__)

方案2:兼容Pandas 1.3以下版本

如果暂时无法升级Pandas,可以用以下两种方式实现自定义列名:

单独计算指标后合并

先实例化滚动窗口对象避免重复计算,分别计算每个指标、重命名后按列拼接:

# 实例化滚动窗口对象
rolling_obj = df.rolling(f"{num_days_window + 1}D", min_periods=day_length)

# 逐个计算自定义指标并重命名
time_mean = rolling_obj["time"].apply(lambda w: window_daily_stats(w, np.mean)).rename("time_mean")
time_std = rolling_obj["time"].apply(lambda w: window_daily_stats(w, np.std)).rename("time_std")

# 拼接得到最终结果
result = pd.concat([time_mean, time_std], axis=1)

聚合后统一重命名列

先用字典格式批量聚合,完成后直接覆盖列名为自定义名称:

result = df.rolling(f"{num_days_window + 1}D", min_periods=day_length).agg(
    {"time": [
        lambda w: window_daily_stats(w, np.mean),
        lambda w: window_daily_stats(w, np.std)
    ]}
)
# 手动设置列名
result.columns = ["time_mean", "time_std"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:45:07