【问题标题】:How to compute rolling rank correlation using Pandas如何使用 Pandas 计算滚动等级相关性
【发布时间】:2017-10-23 07:55:39
【问题描述】:

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2014-01-08
      • 2019-11-06
      • 2014-05-22
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      相关资源
      最近更新 更多