2016-09-27 71 views
1

我試圖計算兩個列之間的協方差。我做着做着如下:pandas groupby熊貓兩列之間的協方差

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 

如果你只需要COV(grouped_v1,grouped_v2)

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

group 
A -2.666667 
B 0.500000 

其中,groupedgroupby對象。對於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()