我是 python 新手,上次编码是在 80 年代中期,所以我感谢您的耐心帮助。
看来 .rolling(window) 要求窗口是固定整数。我需要一个滚动窗口,其中窗口或回溯期是动态的并由另一列给出。
在下表中,我查找 Lookbacksum,它是 Lookback 列指定的数据的滚动总和。
d={'Data':[1,1,1,2,3,2,3,2,1,2],
'Lookback':[0,1,2,2,1,3,3,2,3,1],
'LookbackSum':[1,2,3,4,5,8,10,7,8,3]}
df=pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)
例如:
Data Lookback LookbackSum
0 1 0 1
1 1 1 2
2 1 2 3
3 2 2 4
4 3 1 5
5 2 3 8
6 3 3 10
7 2 2 7
8 1 3 8
9 2 1 3
Run Code Online (Sandbox Code Playgroud)
您可以创建一个与 一起使用的自定义函数df.apply,例如:
def lookback_window(row, values, lookback, method='sum', *args, **kwargs):
loc = values.index.get_loc(row.name)
lb = lookback.loc[row.name]
return getattr(values.iloc[loc - lb: loc + 1], method)(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
然后将其用作:
df['new_col'] = df.apply(lookback_window, values=df['Data'], lookback=df['Lookback'], axis=1)
Run Code Online (Sandbox Code Playgroud)
可能存在一些极端情况,但只要您的索引对齐并且是唯一的 - 它应该满足您想要做的事情。