您几乎已经弄清楚了所有部分,只需将它们结合起来即可:
>>> df.groupby('ID')[['Val1','Val2']].corr() Val1 Val2ID A Val1 1.000000 0.500000 Val2 0.500000 1.000000B 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.500000B 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中的上三角或下三角函数。但是由于存在该元素,据我所知,以更优雅的方式生成简洁的输出并不容易。



