2015-03-11 26 views
6

Zakładając, że mam ramkę danych podobną do poniższej, w jaki sposób mogę uzyskać korelację między 2 konkretnymi kolumnami, a następnie grupować według kolumny "ID"? Uważam, że metoda corów Pandy pozwala na znalezienie korelacji między wszystkimi kolumnami. Jeśli to możliwe, chciałbym również wiedzieć, w jaki sposób mogłem znaleźć korelację "groupby" za pomocą funkcji .agg (np. Np.correlate).Pandas Powiązanie Groupby

Co mam:

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 

Co potrzebne:

ID Correlation_Val1_Val2 
A 0.12 
B 0.22 
C 0.05 

Dzięki!

Odpowiedz

8

dość dużo zorientowali się, wszystkie kawałki, tylko trzeba je połączyć:

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 

w przypadku, wypisanie 2x2 dla każdego ID jest nadmiernie gadatliwe. Nie widzę opcję drukowania skalarne korelację zamiast całej matrycy, ale można zrobić coś takiego:

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

a następnie zmień nazwę i przechowywania rzeczy, jak chcesz.

+0

Jak zmienić to na "rolling_corr()", aby korelacja toczenia była obliczana co 10 dni? – bsheehy