可以说我有一个数据帧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将不会出现此问题)。关于如何实现此目标的任何想法?
答案 0 :(得分:1)
您可以使用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