pandas.core.groupby.DataFrameGroupBy.cov#

DataFrameGroupBy.cov(min_periods=None, ddof=1, numeric_only=False)[源代码][源代码]#

计算列之间的成对协方差,排除NA/null值。

计算 DataFrame 中各序列之间的成对协方差。返回的 DataFrame 是 DataFrame 列的 协方差矩阵

NA 和 null 值在计算中会自动排除。(见下面关于缺失值偏差的注释。)可以为每个创建的值设置最小观察数阈值。低于此阈值的观察值的比较将返回为 NaN

这种方法通常用于时间序列数据的分析,以理解不同测量值随时间的关系。

参数:
min_periodsint, 可选

每对列所需的最小观测数,以获得有效结果。

ddofint, 默认 1

自由度的增量。计算中使用的除数是 N - ddof,其中 N 表示元素的数量。此参数仅在数据框中没有 nan 时适用。

numeric_onlybool, 默认 False

只包含 float, intboolean 数据。

Added in version 1.5.0.

在 2.0.0 版本发生变更: numeric_only 的默认值现在是 False

返回:
DataFrame

DataFrame 系列的相关矩阵。

参见

Series.cov

计算与另一个 Series 的协方差。

core.window.ewm.ExponentialMovingWindow.cov

指数加权样本协方差。

core.window.expanding.Expanding.cov

扩展样本协方差。

core.window.rolling.Rolling.cov

滚动样本协方差。

备注

返回 DataFrame 时间序列的协方差矩阵。协方差通过 N-ddof 进行归一化。

对于那些包含缺失数据的 Series 的 DataFrame(假设数据是 随机缺失),返回的协方差矩阵将是成员 Series 之间方差和协方差的无偏估计。

然而,对于许多应用来说,这个估计可能不可接受,因为估计的协方差矩阵不能保证是半正定的。这可能导致估计的相关性绝对值大于一,和/或一个不可逆的协方差矩阵。更多细节请参见 协方差矩阵的估计

示例

>>> df = pd.DataFrame(
...     [(1, 2), (0, 3), (2, 0), (1, 1)], columns=["dogs", "cats"]
... )
>>> df.cov()
          dogs      cats
dogs  0.666667 -1.000000
cats -1.000000  1.666667
>>> np.random.seed(42)
>>> df = pd.DataFrame(
...     np.random.randn(1000, 5), columns=["a", "b", "c", "d", "e"]
... )
>>> df.cov()
          a         b         c         d         e
a  0.998438 -0.020161  0.059277 -0.008943  0.014144
b -0.020161  1.059352 -0.008543 -0.024738  0.009826
c  0.059277 -0.008543  1.010670 -0.001486 -0.000271
d -0.008943 -0.024738 -0.001486  0.921297 -0.013692
e  0.014144  0.009826 -0.000271 -0.013692  0.977795

最少周期数

此方法还支持一个可选的 min_periods 关键字,该关键字指定每个列对所需的最小非NA观察数,以便有有效结果:

>>> np.random.seed(42)
>>> df = pd.DataFrame(np.random.randn(20, 3), columns=["a", "b", "c"])
>>> df.loc[df.index[:5], "a"] = np.nan
>>> df.loc[df.index[5:10], "b"] = np.nan
>>> df.cov(min_periods=12)
          a         b         c
a  0.316741       NaN -0.150812
b       NaN  1.248003  0.191417
c -0.150812  0.191417  0.895202