【问题标题】:Pandas Rolling Correlation Introduces GapsPandas 滚动相关性引入了差距
【发布时间】:2017-10-27 13:52:43
【问题描述】:

我有一个比较干净的数据集,有两列,没有间隙,快照如下:

我运行以下代码行:

correlation = pd.rolling_corr(data['A'], data['B'], window=120)

由于某种原因,这会输出一个数据框(如下图所示),其中有很大的间隙:

我之前没有亲自见过这个问题,并且在查看数据(不仅仅是代码)后不确定问题可能是什么?

【问题讨论】:

  • 同样的问题仍然存在,但感谢您的提醒。有趣的是,将一个系列与自身相关的滚动不会给出 1,而且其中也有差距。
  • 你能显示你的数据吗?不在图片中?

标签: python pandas correlation


【解决方案1】:

您在 correlation 变量中获取 NAN 值,其中行数小于 window 属性的值。

import pandas as pd
import numpy as np

data = pd.DataFrame({'A':np.random.randn(10), 'B':np.random.randn(10)})
correlation = pd.rolling_corr(data['A'], data['B'], window=3)
print correlation
0         NaN
1         NaN
2    0.852602
3    0.020681
4   -0.915110
5   -0.741857
6    0.173987
7    0.874049
8   -0.874258
9   -0.835340

docs for this function 中,min_periods 属性部分对此发出警告:“窗口中需要有值的最小观察数(否则结果为 NA)。”

似乎默认的None 不起作用,因为您认为除非您为此设置一个值,否则您不会看到 NaN。

【讨论】:

  • 嗨,杰弗里,如果我没记错的话,我相信这应该只是一开始的问题,因为一旦你有足够的时间,它应该开始工作(如你上面的例子)。日期不是在每种情况下都是连续的?这有什么不同吗,或者它只是连续的行你知道吗
【解决方案2】:

这是由于时间序列、周末等中缺少日期而发生的。在您的示例中,这方面的证据是 2003 年 7 月 2 日 -> 2003 年 10 月 2 日。一种解决方案是通过重新索引时间序列数据帧来填补这些空白。

df.index = pd.DatetimeIndex(df.index) # required
df = df.asfreq('D') # reindex will include missing days
df = df.fillna(method='bfill') # fill / interpolate NaNs
corr = df.A.rolling(30).corr(df.B) # no gaps

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多