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

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

计算滚动相关性。

参数:
其他Series 或 DataFrame,可选

如果未提供,则将默认为自身并生成成对输出。

成对bool, 默认为 None

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

ddofint, 默认 1

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

numeric_only布尔值, 默认为 False

只包含浮点数、整数、布尔列。

Added in version 1.5.0.

返回:
Series 或 DataFrame

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

参见

cov

类似的方法来计算协方差。

numpy.corrcoef

NumPy 皮尔逊相关系数计算。

Series.rolling

使用 Series 数据调用 rolling。

DataFrame.rolling

使用 DataFrames 调用 rolling。

Series.corr

聚合 Series 的相关性。

DataFrame.corr

聚合 DataFrame 的相关性。

备注

此函数使用皮尔逊的相关性定义(https://en.wikipedia.org/wiki/Pearson_correlation_coefficient)。

当未指定 other 时,输出将是自相关(例如全为1),除了 DataFrame 输入且 pairwise 设置为 True 的情况。

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

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

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

在缺少元素的情况下,只会使用完全成对观察的数据。

示例

下面的示例展示了使用窗口大小为四的滚动计算,与使用 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

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

>>> 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