Неожиданное поведение в корреляции панды с использованием смещения - PullRequest
0 голосов
/ 19 мая 2018

Это входные панды 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()

Не важно, является ли окно int или offset, как в обоих случаяхразмер движущегося окна 1. Спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Если вы погрузитесь в код 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()

имеет окно = 86400000000000 и min_periods = 1, тогда как

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

имеет окно = 1 и min_periods = нет.

Ваш индекс dtype = 'datetime64 [ns]'

Итак, похоже, что «1d» переводится в 24 * 60 * 60 * 1000000000 или количество наносекунд в день.Так что это то же самое, что и «1d».

df.rolling(window=86400000000000, min_periods=1).corr()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...