[英]covariance between two columns in pandas groupby 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'])
理想情況下,我想獲得 X 和 Y 之間的協方差,而不是整個方差協方差矩陣,因為我只有兩列。
謝謝,
你快到了,只是你不清楚 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
其中, grouped
是一個groupby
對象。 對於grouped.apply
函數,它需要一個回調函數作為參數,每個組將作為回調函數的參數。 這里,回調函數是一個lambda
函數,參數x
是一個組(一個 DataFrame)。
希望對大家理解groupby有所幫助。
以下代碼為您提供了分組方差-協方差矩陣。 您可以根據需要對其進行子集化以獲得協方差。
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()
如果您正在尋找特定兩列的cov()
,您可以使用df.Age.cov(df.Salary)
假設 Age 和salary 是 dataFrame 的許多列中的兩列。 這僅對兩列有用。
這是一個替代解決方案,它估計每個組內的cov(value1, value2)
,但不使用.apply()
:
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]})
B = A.groupby('group')
cov_a_b = B[['value1', 'value2']].cov(ddof=0)['value1'].unstack()['value2']
作為與該問題有些相關的附加說明,在使用 NumPy/Pandas 的方差和協方差實現時應小心,因為它們默認使用 1 的自由度校正(令人困惑的是,NumPy 的實現默認為ddof=0
方差)。 這就是我包含ddof=0
的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.