【问题标题】:Unexpected behavior in pandas rolling correlation using offset使用偏移量的熊猫滚动相关中的意外行为
【发布时间】:2018-10-29 21:49:13
【问题描述】:

这是输入的 pandas DataFrame:

df = pd.DataFrame({'x':(1,2), 'y':(2,3)},
                  index=[pd.Timestamp('20180101'), pd.Timestamp('20180102')])

为什么这两个会返回不同的结果?

df.rolling(window='1d').corr()
df.rolling(window=1).corr()

window 是 int 还是 offset 无关紧要,因为在这两种情况下,移动窗口的大小都是 1。 谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果您深入研究 Pandas 代码并按照它访问 window.py,您将到达:

        def _get_corr(a, b):
    
            a = a.rolling(window=window, min_periods=self.min_periods,
                          freq=self.freq, center=self.center)
            b = b.rolling(window=window, min_periods=self.min_periods,
                          freq=self.freq, center=self.center)
    
            return a.cov(b, **kwargs) / (a.std(**kwargs) * b.std(**kwargs))
    

    如果您在示例中打印出 window 和 min_periods 的值

    df.rolling(window='1d').corr()
    

    有 window=86400000000000 和 min_periods=1,而

    df.rolling(window=1).corr()
    

    有 window=1 和 min_periods=None。

    您的索引是 dtype='datetime64[ns]'

    因此,看起来“1d”被转换为 24*60*60*1000000000 或每天的纳秒数。所以这和 '1d' 是一样的。

    df.rolling(window=86400000000000, min_periods=1).corr()
    

    【讨论】:

      【解决方案2】:

      troy-d的总结回答:

      • window='1d' 表示 1 天的窗口
      • window=1 表示 1 个元素的窗口

      【讨论】:

        猜你喜欢
        • 2021-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        • 1970-01-01
        • 2020-06-19
        相关资源
        最近更新 更多