动态窗口上的滚动总和

buS*_*umi 5 python pandas

我是 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)

Jon*_*nts 5

您可以创建一个与 一起使用的自定义函数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)

可能存在一些极端情况,但只要您的索引对齐并且是唯一的 - 它应该满足您想要做的事情。