是否有一种很好的方法来获得两个分组的DataFrame列的简单关联?

似乎无论熊猫.corr()函数想要返回什么相关矩阵。例如。,

i = pd.MultiIndex.from_product([['A','B','C'], np.arange(1, 11, 1)], names=['Name','Num'])
test = pd.DataFrame(np.random.randn(30, 2), i, columns=['X', 'Y'])
test.groupby(['Name'])['X','Y'].corr()


退货

               X         Y
Name
A    X  1.000000  0.152663
     Y  0.152663  1.000000
B    X  1.000000 -0.155113
     Y -0.155113  1.000000
C    X  1.000000  0.214197
     Y  0.214197  1.000000


但是很明显,我只对非对角线术语感兴趣。似乎很费解地计算四个值,然后尝试选择我想要的一个,如

test.groupby(['Name'])['X','Y'].corr().ix[0::2,'Y']


要得到

A     X    0.152663
B     X   -0.155113
C     X    0.214197

最佳答案

我希望像test.groupby('Name')['X'].corr('Y')这样的东西可以工作,但是不能,并且当您通过Series本身(test['Y'])时,它会变慢。在这一点上,应用似乎是最好的选择:

test.groupby('Name').apply(lambda df: df['X'].corr(df['Y']))
Out:
Name
A   -0.484955
B    0.520701
C    0.120879
dtype: float64


这将遍历每个组,并在每个分组的DataFrame中应用Series.corr。区别在于没有设置随机种子。

关于python - 两个分组的DataFrame列的 Pandas 简单关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48570130/

10-10 11:40