2016-09-27 14 views
1

グループごとに2つの列の共分散を計算しようとしています。私は、次のことをやってやっている:パンダの2つの列間の共分散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']) 

私は2つのだけの列を持っているので理想的には、私は、XとYの間の共分散ではなく全体の分散共分散行列を取得したいと思います。

は、次のコードは、あなたにグループ化された分散共分散行列を与え、

答えて

3

あなたは、GROUPBYオブジェクトを理解クリア詳細はPandas-GroupByが表示されないだけで、ほとんどがあります。

私が正しく理解すれば、同じグループの2つの列間の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 

あなただけgroupedgroupbyオブジェクトで、これでは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 

が必要な場合。 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()