熊猫滚动适用:传递二维数组

时间:2018-06-10 13:37:03

标签: python python-3.x pandas

我有一个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数组?

0 个答案:

没有答案