滚动多个列,在Pandas中返回一个结果

时间:2017-07-31 09:08:20

标签: python pandas

我在Pandas的多个柱子上滚动一个窗口,我所拥有的是:

df = pd.DataFrame({'A':[1,2,3,4],'B':[5,6,7,8]})
def test(ts):
    print(ts.shape)
df.rolling(2).apply(test)

然而问题是ts.shape打印(2,)并且我希望它打印(2,2),包括行和列的整个窗口。

关于滚动如何工作的直觉有什么问题?如何在使用Pandas后获得结果?

1 个答案:

答案 0 :(得分:0)

您可以使用一点hack - 获取select_dtypes长度的数字列并使用此标量值:

df = pd.DataFrame({'A':[1,2,3,4],'B':[5,6,7,8], 'C':list('abcd')})
print (df)
   A  B  C
0  1  5  a
1  2  6  b
2  3  7  c
3  4  8  d

cols = len(df.select_dtypes(include=[np.number]).columns)
print (cols)
2

def test(ts):
    print(tuple((ts.shape[0], cols)))
    return ts.sum()

(2, 2)
(2, 2)
(2, 2)
(2, 2)
(2, 2)
(2, 2)

df = df.rolling(2).apply(test)