2016-09-27 4 views
1

Я пытаюсь вычислить ковариацию между двумя столбцами по группе. Я делаю, выполнив следующие действия:Ковариация между двумя столбцами в pandas groupby pandas

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, которая дает попарно 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 

Если вам нужно только коронавирус (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.

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() 
Смежные вопросы