2015-03-11 42 views
6

Giả sử tôi có một khung dữ liệu tương tự như dưới đây, làm cách nào tôi có được mối tương quan giữa 2 cột cụ thể và sau đó nhóm theo cột 'ID'? Tôi tin rằng phương pháp 'corras' của Pandas tìm ra mối tương quan giữa tất cả các cột. Nếu có thể tôi cũng muốn biết làm cách nào tôi có thể tìm thấy mối tương quan 'nhóm' với hàm .agg (tức là np.correlate).Pandas Correlation Groupby

Những gì tôi có:

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 

Những gì tôi cần:

ID Correlation_Val1_Val2 
A 0.12 
B 0.22 
C 0.05 

Cảm ơn!

Trả lời

8

Bạn khá nhiều tìm ra tất cả các mảnh, chỉ cần kết hợp chúng:

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 

Trong trường hợp của bạn, in ra một 2x2 cho mỗi ID là quá dài dòng. Tôi không thấy một tùy chọn để in một mối tương quan vô hướng thay vì toàn bộ ma trận, nhưng bạn có thể làm điều gì đó như:

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

Và sau đó đổi tên và lưu trữ những thứ như bạn muốn.

+0

Làm cách nào để thay đổi điều này thành 'rolling_corr()' sao cho mối tương quan lăn được tính mỗi 10 ngày? – bsheehy

Các vấn đề liên quan