首页 > 解决方案 > 如何用 numpy 计算 df.Series 和 df.Series.shift(1) 之间的关系?

问题描述

我正在与 TSA 打交道,需要知道 和 之间的df.Series关系df.Series.shift(1)df.corr()有帮助,如下所示:

(1)df.DataFrame.corr()

df = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/daily-min-temperatures.csv',
                 index_col=0, parse_dates=True)
values = pd.DataFrame(df.values)
dataframe = pd.concat([values.shift(1), values], axis=1)
dataframe.columns = ['col1', 'col2']

print(dataframe.corr())
"""
         col1     col2
col1  1.00000  0.77487
col2  0.77487  1.00000
"""

问题是我不知道如何使用numpy.corrcoef or scipy.stats.stats.pearsonr,提前谢谢您的帮助!

(2)numpyscipy.stats.stats.pearsonr以这种方式应用

a = dataframe['col1']
b = dataframe['col2']
print(np.corrcoef(a, b))
"""
[[nan nan]
 [nan  1.]]
"""

print(scipy.stats.stats.pearsonr(a, b))
"""
ValueError: array must not contain infs or NaNs
"""

标签: pythonpandasnumpycorrelationpearson-correlation

解决方案


的第一行将df.shift(1)是 NaN,因为它之前没有元素。您需要在计算它们时删除该行

>>> scipy.stats.stats.pearsonr(df.values.flatten()[1:],
                               df.shift(1).values.flatten()[1:])
(0.7748702165384456, 0.0)

>>> np.corrcoef(df.values.flatten()[1:],
                df.shift(1).values.flatten()[1:])
array([[1.        , 0.77487022],
       [0.77487022, 1.        ]])

推荐阅读