2015-03-11 4 views
6

Предполагая, что у меня есть dataframe, подобный приведенному ниже, как бы получить корреляцию между двумя конкретными столбцами, а затем группировать по столбцу «ID»? Я считаю, что метод corr 'Pandas находит корреляцию между всеми столбцами. Если возможно, мне также хотелось бы узнать, как я могу найти корреляцию «groupby», используя функцию .agg (т. Е. Np.correlate).Pandas Correlation Groupby

Что у меня есть:

ID Val1 Val2 OtherData OtherData 
A 5 4 x x 
A 4 5 x x 
A 6 6 x x 
B 4 1 x x 
B 8 2 x x 
B 7 9 x x 
C 4 8 x x 
C 5 5 x x 
C 2 1 x x 

Что мне нужно:

ID Correlation_Val1_Val2 
A 0.12 
B 0.22 
C 0.05 

Спасибо!

ответ

8

Вы очень много понял, все части, просто нужно объединить их:

In [441]: df.groupby('ID')[['Val1','Val2']].corr() 
Out[441]: 
      Val1  Val2 
ID       
A Val1 1.000000 0.500000 
    Val2 0.500000 1.000000 
B Val1 1.000000 0.385727 
    Val2 0.385727 1.000000 

В вашем случае, выводя 2х2 для каждого ID чрезмерно многословным. Я не вижу вариант для печати скалярных корреляций вместо всей матрицы, но вы можете сделать что-то вроде:

In [442]:df.groupby('ID')[['Val1','Val2']].corr().ix[0::2,'Val2'] 
Out[442]: 
ID  
A Val1 0.500000 
B Val1 0.385727 

А затем переименовать и хранить вещи, как вам нравится.

+0

Как бы это изменить на «rol_corr()», чтобы корреляция качения вычислялась каждые 10 дней? – bsheehy