pandas.core.window.rolling.Rolling.corr#

Rolling.corr(other=None, pairwise=None, ddof=1, numeric_only=False)[源代码]#

计算滚动相关性。

Parameters:
otherSeries 或 DataFrame,可选

如果未提供,则默认为 self 并产生成对输出。

pairwise布尔值,默认为 None

如果为 False,则仅使用 self 和 other 之间的匹配列,并且输出为 DataFrame。如果为 True,则计算所有成对组合,并且在输入为 DataFrame 时,输出为 MultiIndexed DataFrame。在缺失元素的情况下,仅使用完整的成对观测值。

ddofint, 默认值 1

自由度增量。计算中使用的除数是 N - ddof,其中 N 表示元素数量。

numeric_onlybool,默认 False

仅包括浮点数、整数、布尔列。

在 1.5.0 版本加入.

Returns:
Series 或 DataFrame

返回类型与原始对象相同,并具有 np.float64 数据类型。

参见

cov

计算协方差的类似方法。

numpy.corrcoef

NumPy Pearson 相关系数计算。

pandas.Series.rolling

使用 Series 数据调用滚动。

pandas.DataFrame.rolling

使用 DataFrame 调用滚动。

pandas.Series.corr

聚合 Series 的相关系数。

pandas.DataFrame.corr

聚合 DataFrame 的相关系数。

Notes

此函数使用 Pearson 的相关系数定义 (https://en.wikipedia.org/wiki/Pearson_correlation_coefficient)。

当未指定 other 时,输出将是自相关(例如,全部为 1),除非输入为 DataFramepairwise 设置为 True

对于相等值的序列的相关性,函数将返回 NaN;这是由于 0/0 除法错误。

pairwise 设置为 False 时,将仅使用 selfother 之间的匹配列。

pairwise 设置为 True 时,输出将是一个 MultiIndex DataFrame,其中第一级是原始索引,第二级是 other DataFrame 的列。

在缺失元素的情况下,将只使用完整的成对观测值。

Examples

下面的示例展示了一个窗口大小为四的滚动计算,这与使用 numpy.corrcoef() 的等效函数调用相匹配。

>>> v1 = [3, 3, 3, 5, 8]
>>> v2 = [3, 4, 4, 4, 8]
>>> np.corrcoef(v1[:-1], v2[:-1])
array([[1.        , 0.33333333],
       [0.33333333, 1.        ]])
>>> np.corrcoef(v1[1:], v2[1:])
array([[1.       , 0.9169493],
       [0.9169493, 1.       ]])
>>> s1 = pd.Series(v1)
>>> s2 = pd.Series(v2)
>>> s1.rolling(4).corr(s2)
0         NaN
1         NaN
2         NaN
3    0.333333
4    0.916949
dtype: float64

下面这个例子展示了使用 pairwise 选项在 DataFrame 上进行类似的滚动计算。

>>> matrix = np.array([[51., 35.],
...                    [49., 30.],
...                    [47., 32.],
...                    [46., 31.],
...                    [50., 36.]])
>>> np.corrcoef(matrix[:-1, 0], matrix[:-1, 1])
array([[1.       , 0.6263001],
       [0.6263001, 1.       ]])
>>> np.corrcoef(matrix[1:, 0], matrix[1:, 1])
array([[1.        , 0.55536811],
       [0.55536811, 1.        ]])
>>> df = pd.DataFrame(matrix, columns=['X', 'Y'])
>>> df
      X     Y
0  51.0  35.0
1  49.0  30.0
2  47.0  32.0
3  46.0  31.0
4  50.0  36.0
>>> df.rolling(4).corr(pairwise=True)
            X         Y
0 X       NaN       NaN
  Y       NaN       NaN
1 X       NaN       NaN
  Y       NaN       NaN
2 X       NaN       NaN
  Y       NaN       NaN
3 X  1.000000  0.626300
  Y  0.626300  1.000000
4 X  1.000000  0.555368
  Y  0.555368  1.000000