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