2016-09-27 3 views
1

그룹별로 두 열 사이의 공분산을 계산하려고합니다. 나는 다음과 같은 일을하고있는 중이 야 :팬더에서 두 열 사이의 공분산 팬더

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가 아닌 전체 분산 - 공분산 행렬 사이의 공분산을 좀하고 싶습니다, 난 단지 두 개의 열이 있기 때문에.

답변

3

거의 대부분 존재하며 groupby 개체를 이해하지 못한다는 것을 알고 있습니다. 자세한 내용은 Pandas-GroupBy을 참조하십시오.

문제가 있으면 올바르게 이해하면 동일한 그룹의 두 열 사이에 cov를 계산할 수 있습니다.

가장 간단한 방법은 groupeby.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 

groupedgroupby 개체입니다

grouped = A.groupby('group') 
grouped.apply(lambda x: x['value1'].cov(x['value2'])) 

group 
A -2.666667 
B 0.500000 

,하는 COV (grouped_v1, grouped_v2)가 필요합니다. grouped.apply 함수의 경우 인수로 콜백 함수가 필요하며 각 그룹은 콜백 함수의 인수가됩니다. 여기서 콜백 함수는 lambda 함수이고 인수 x은 그룹 (DataFrame)입니다.

희망 사항은 groupby에 대한 이해에 도움이 될 것입니다.

2

다음 코드는 당신에게 그룹화 분산 - 공분산 행렬을 제공 주셔서 감사합니다. 당신은 단지 공분산을 얻기를 원하는 것처럼 그것을 부분 집합화할 수 있습니다.

import pandas as pd 
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]}) 
print A.groupby('group').cov()