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

如何在Pandas中为各列应用不同窗口长度的移动平均?

给DataFrame每列应用不同窗口长度的移动平均

刚好碰到过一模一样的需求!Pandas本身没有直接的内置函数能一次性给每列指定不同的移动窗口长度,但我们有两种简洁高效的方法来实现,完全不需要繁琐的手动循环:

方法1:用pd.concat + 生成器表达式(最直观)

这种方法思路很直接:把每一列和对应的窗口长度配对,分别计算移动平均,最后再拼回一个DataFrame。代码示例如下:

import pandas as pd
import numpy as np

# 先构造测试数据
df = pd.DataFrame(np.random.randn(10, 3), columns=['Col1', 'Col2', 'Col3'])
windows = [1, 3, 5]  # 对应Col1窗口1,Col2窗口3,Col3窗口5

# 核心代码
result_df = pd.concat(
    [df[col].rolling(window=win).mean() for col, win in zip(df.columns, windows)],
    axis=1
)

这个方法的好处是可读性极强,每一步都清晰,而且rolling是Pandas的向量化操作,效率比纯Python循环高很多。

方法2:用apply配合列索引映射

如果你更倾向于用apply的写法,也可以通过列名获取对应的窗口长度,把参数动态传入:

result_df = df.apply(
    lambda col: col.rolling(window=windows[df.columns.get_loc(col.name)]).mean(),
    axis=0
)

这里的关键是df.columns.get_loc(col.name)拿到当前列在DataFrame中的索引,再从windows向量里取出对应的窗口值。

补充说明

两种方法本质上都是调用Pandas的rolling向量化方法,性能差异可以忽略。如果你的DataFrame非常大,这两种方法都比手动遍历每列再赋值要高效得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:54:43