3

我想计算数据框中两列之间的滚动等级相关性。但是,rolling_corrpandas 中的 current 不支持排名相关。我试图实现与 的滚动等级相关rolling_apply,但没有任何成功。似乎rolling_apply只需要一个数组作为输入参数,但相关性需要两个数组。有没有一种聪明的方法来实现滚动排名相关性rolling_apply或其他一些方法?如果可能的话,排名相关性将是一个很好的补充rolling_corr

4

1 回答 1

3

我不认为rolling_apply可以用来进行滚动相关,因为它似乎将 DataFrames 分解为一维数组。可能有更好的方法来做到这一点,但一种解决方案是让生成器自己为每个窗口生成一个切片:

def window(length, size=2, start=0):
    while start + size <= length:
        yield slice(start, start + size)
        start += 1

然后循环遍历它..

In [144]: from pandas import DataFrame
     ...: import numpy as np
     ...: 
     ...: df = DataFrame(np.arange(10).reshape(2,5).T, columns=['a','b'])
     ...: 
     ...: df.iloc[0,1] = -1       #still perfect with ranked correlation, but not with pearson's r
     ...: 
     ...: for w in window(len(df), size=3):
     ...:     df_win = df.iloc[w,:]
     ...:     spearman = df_win['a'].rank().corr(df_win['b'].rank())
     ...:     pearson  = df_win['a'].corr(df_win['b'])
     ...:     print w.start, spearman, pearson
     ...:     
0 1.0 0.917662935482
1 1.0 1.0
2 1.0 1.0
于 2013-08-02T23:19:27.990 回答