在熊猫中,如何计算一系列序列的每一列的协方差?

问题描述

可以说我有一个数据帧df,具有10列和几百行。这些列分别标记为A,B,C,... 此外,我有一个熊猫系列s,其中包含的数据长度相同,有几百行。

我想做的是获取一个DataFrame,其中包含df中我的每一行与一系列s的协方差。像这样:

       cov_s
    A  0.003
    B  0.0089
    C  0.0032
    ...
    J  0.0192

我想避免将s添加为df的一列,并进行df.cov()并选择添加的s下的一列,因为我的数据集是可能会变得非常大,并且执行完整的协方差矩阵可能会遇到一些收敛问题(而仅执行2序列cov将不会出现此问题)。关于如何实现此目标的任何想法?

解决方法

您可以使用apply很容易地获得s与每一列的协方差。

设置数据:

import pandas as pd
import numpy as np
np.random.seed(0)

df = pd.DataFrame(np.random.rand(20,5),columns=list("ABCDE"))
s = pd.Series(np.random.rand(20))

print(df.head())
print()
print(s.head())
          A         B         C         D         E
0  0.548814  0.715189  0.602763  0.544883  0.423655
1  0.645894  0.437587  0.891773  0.963663  0.383442
2  0.791725  0.528895  0.568045  0.925597  0.071036
3  0.087129  0.020218  0.832620  0.778157  0.870012
4  0.978618  0.799159  0.461479  0.780529  0.118274

0    0.677817
1    0.270008
2    0.735194
3    0.962189
4    0.248753
dtype: float64

使用apply获得协方差:

df.apply(lambda column: s.cov(column))
A   -0.011373
B   -0.017225
C   -0.014311
D    0.004783
E    0.015021
dtype: float64

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...