我有一个pandas数据框,我希望对其进行一些滚动计算。这不是一个简单的公式,因此没有任何内置。为了最小化可验证的完整示例,让我们假设数据帧是。
df = pd.DataFrame({'a': [1.1, 2.1, 3.1, 4.1, 6.1, 8.1],
'b': [2.2, 3.2, 4.2, 5.2, 7.2, 9.2]})
我正在应用以下内容(为了调试和说明目的而再次简化)。
def func(arr):
print(arr)
return 0
印刷品(arr)是要看什么是进料的。所以要求是我希望同时采用a和b列的4号滚动窗口。因此阵列尺寸应为4 x 2.
我试过
df_res = df.rolling(window=4, center=False).apply(lambda x: func(x))
print(arr)给出了
[ 1.1 2.1 3.1 4.1]
[ 2.1 3.1 4.1 6.1]
[ 3.1 4.1 6.1 8.1]
[ 2.2 3.2 4.2 5.2]
[ 3.2 4.2 5.2 7.2]
[ 4.2 5.2 7.2 9.2]
和df_res给出
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 0.0 0.0
4 0.0 0.0
5 0.0 0.0
只是为a和b列分别提供4 x 1阵列。
根据StackOverflow的回答apply a function on rolling window in Dataframe where whole dataframe is passed to function,建议使用min_periods和axis = 1.
df_res = df.rolling(window=4, min_periods=2, axis=1, center=False).apply(lambda x: func(x))
但这也不是我要求的。 print(arr)给出了。
[ 1.1 2.2]
[ 2.1 3.2]
[ 3.1 4.2]
[ 4.1 5.2]
[ 6.1 7.2]
[ 8.1 9.2]
,df_res的格式为
a b
0 NaN 0.0
1 NaN 0.0
2 NaN 0.0
3 NaN 0.0
4 NaN 0.0
5 NaN 0.0
所以发生的事情是它以2 x 1阵列进食。我怎样才能让pandas做一个滚动窗口大小为4并跨越两列,以便输入的是一个4 x 2数组?