2017-07-31 64 views
0

林击中了超过在熊猫多列滚动的窗口,我有什么是:翻身多个列在大熊猫返回一个结果

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),即包括行和列的整个窗口。

关于滚动工作的直觉以及在使用熊猫之后如何获得结果,我的直觉有什么不对?

+0

它开始的第一列,取前两个观察再下两当第一列完成后,转到第二个。你可以看到,通过从测试函数返回一个浮点值并打印ts而不是它的形状。 – ayhan

+0

是的,但我怎样才能得到我想用熊猫的结果呢? – user3139545

+0

那么,你正在使用自定义函数,所以它不会被矢量化。为什么不使用循环? – ayhan

回答

0

您可以使用一个小巧的黑客工具 - 通过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)