我正在尝试按组计算两列之间的协方差。我正在做以下事情:
A = pd.DataFrame({'group':['A','A','A','A','B','B','B'],
'value1':[1,2,3,4,5,6,7],
'value2':[8,5,4,3,7,8,8]})
B = A.groupby('group')
B['value1'].cov(B['value2'])
理想情况下,我想获得 X 和 Y 之间的协方差,而不是整个方差-协方差矩阵,因为我只有两列。
谢谢,
请您参考如下方法:
您几乎就在那里,只是您不清楚 groupby 对象,请参阅 Pandas-GroupBy了解更多详情。
对于你的问题,如果我理解正确的话,你想计算同一组中两列之间的 cov。
最简单的方法是使用 groupeby.cov 函数,它给出组之间的成对 cov。
A.groupby('group').cov()
value1 value2
group
A value1 1.666667 -2.666667
value2 -2.666667 4.666667
B value1 1.000000 0.500000
value2 0.500000 0.333333
如果你只需要cov(grouped_v1, grouped_v2)
grouped = A.groupby('group')
grouped.apply(lambda x: x['value1'].cov(x['value2']))
group
A -2.666667
B 0.500000
其中,grouped是一个groupby对象。对于grouped.apply 函数,它需要一个回调函数作为参数,每个组将作为回调函数的参数。这里,回调函数是一个 lambda 函数,参数 x 是一个组(一个 DataFrame)。
希望对您理解groupby有所帮助。
