【发布时间】:2022-12-10 21:16:17
【问题描述】:
我有这个df:
(这里是df.head())
date colA
0 2018-01-05 0.6191
1 2018-01-20 0.5645
2 2018-01-25 0.5641
3 2018-01-27 0.5404
4 2018-01-30 0.4933
我想递归地将一个函数应用于每 3 行,这意味着行:1、2、3,然后是行:2、3、4,然后是第 3、4、5 行,等等。
这就是我写的:
def my_rolling_func(df, val):
p1 = (df['date']-df['date'].min()).dt.days.tolist()[0],df[val].tolist()[0]
p2 = (df['date']-df['date'].min()).dt.days.tolist()[1],df[val].tolist()[1]
p3 = (df['date']-df['date'].min()).dt.days.tolist()[2],df[val].tolist()[2]
return sum([i*j for i,j in [p1,p2,p3]])
df.rolling(3,center=False,axis=1).apply(my_rolling_func, args=('colA'))
但我收到此错误:
ValueError: Length of passed values is 1, index implies 494.
494 是我的df 中的行数。
我不确定为什么它说我传递了 1 的长度,我认为滚动会根据我定义的窗口大小 (3) 生成 df 的切片,然后它将函数应用于 df 的子集。
【问题讨论】:
标签: python-3.x pandas rolling-computation