python - 在熊猫中,如何计算每列与系列的协方差?
问题描述
假设我有一个数据框,df
有 10 列和数百行。这些列标记为 A、B、C、... 此外,我有一个 pandas 系列,s
包含长度相同的数百行数据。
我想做的是得到一个 DataFrame ,其中包含我的每一行df
与 series的协方差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
推荐阅读
- c# - 关闭并重新打开客户端表单后 C# TCP 客户端重新连接
- ionic-framework - 离子 .pop() 与 .dismiss()
- ios - 当swift4中文本字段的值为0时如何显示警报?
- java - 在 Java 中读取 URL
- c# - 使用来自 c# 的参数运行 exe
- java - 如何在火花中使用 org.slf4j.Logger?
- python - django 不断更换过滤器
- coronasdk - 无法在横向模式下运行 Corona 游戏
- angular - 检查字符串是否包含 subString 或 typeScript angular 6 中 subString 的一部分
- java - 覆盖原始类型的泛型方法