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

能否让pandas rolling.apply将DataFrame传入自定义函数?

答:完全可行,但需要调整一个关键参数

当然能让你的自定义函数fn接收DataFrame子集作为输入!不过有个小细节得留意——默认情况下,pandas的rolling.apply()会把窗口内的数据以一维Series的形式传给你的函数,而非DataFrame子集。要实现你想要的效果,只需要加一个参数设置就行。

具体实现方法

你只需要在调用rolling.apply()时添加raw=False参数。当raw=False生效时,pandas会把窗口对应的行数据打包成一个小型DataFrame,直接传递给你的自定义函数fn。

给你举个可运行的示例:

import pandas as pd

# 定义接收DataFrame子集的自定义函数
def fn(df_subset):
    # 这里可以对df_subset做任意DataFrame操作,比如计算多列的统计值组合
    return df_subset['A'].mean() * df_subset['B'].median()

# 创建测试用的多列DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50]
})

# 调用rolling.apply并设置raw=False
result = df.rolling(window=2).apply(lambda x: fn(x), raw=False)
print(result)

额外注意点

  • 性能权衡:raw=False的运行效率会比默认的raw=True稍低,因为需要构造和处理DataFrame对象。如果你的数据集规模极大,可能需要根据实际需求权衡是否使用该参数。
  • 返回值要求:自定义函数fn必须返回一个标量值(比如单个数字),这样rolling.apply()才能将结果组合成最终的Series/DataFrame返回。如果返回多值会直接触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:10:30