gpt4 book ai didi

python - Pandas Correlation Groupby

转载 作者:IT老高 更新时间:2023-10-28 21:12:12 28 4
gpt4 key购买 nike

假设我有一个类似于下面的数据框,我将如何获得 2 个特定列之间的相关性,然后按“ID”列分组?我相信 Pandas 'corr' 方法可以找到所有列之间的相关性。如果可能的话,我还想知道如何使用 .agg 函数(即 np.correlate)找到“groupby”相关性。

我有什么:

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

我需要什么:

ID  Correlation_Val1_Val2
A 0.12
B 0.22
C 0.05

最佳答案

你几乎想通了所有的部分,只需将它们组合起来:

>>> df.groupby('ID')[['Val1','Val2']].corr()

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

在您的情况下,为每个 ID 打印 2x2 过于冗长。我没有看到打印标量相关性而不是整个矩阵的选项,但是如果您只有两个变量,您可以执行类似这样的简单操作:

>>> df.groupby('ID')[['Val1','Val2']].corr().iloc[0::2,-1]

ID
A Val1 0.500000
B Val1 0.385727

对于 3+ 个变量的更一般情况

对于 3 个或更多变量,创建简洁的输出并不简单,但您可以执行以下操作:

groups = list('Val1', 'Val2', 'Val3', 'Val4')
df2 = pd.DataFrame()
for i in range( len(groups)-1):
df2 = df2.append( df.groupby('ID')[groups].corr().stack()
.loc[:,groups[i],groups[i+1]:].reset_index() )

df2.columns = ['ID', 'v1', 'v2', 'corr']
df2.set_index(['ID','v1','v2']).sort_index()

请注意,如果我们没有 groupby 元素,则可以直接使用 numpy 中的上三角函数或下三角函数。但由于存在该元素,据我所知,以更优雅的方式生成简洁的输出并不容易。

关于python - Pandas Correlation Groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988627/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com