Pandas 两个分组的 DataFrame 列的简单关联
Pandas simple correlation of two grouped DataFrame columns
有没有好的方法来获得两个分组的 DataFrame 列的简单相关性?
好像不管什么pandas.corr()
函数都要return一个相关矩阵。例如,
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()
returns
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
但显然我只对非对角线项感兴趣。计算这四个值然后尝试 select 我想要的值似乎很笨拙,如
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')
这样的东西能起作用,但它不起作用,当你通过系列本身 (test['Y']
) 时它会变慢。在这一点上,apply 似乎是最好的选择:
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。不同之处在于没有设置随机种子。
有没有好的方法来获得两个分组的 DataFrame 列的简单相关性?
好像不管什么pandas.corr()
函数都要return一个相关矩阵。例如,
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()
returns
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
但显然我只对非对角线项感兴趣。计算这四个值然后尝试 select 我想要的值似乎很笨拙,如
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')
这样的东西能起作用,但它不起作用,当你通过系列本身 (test['Y']
) 时它会变慢。在这一点上,apply 似乎是最好的选择:
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。不同之处在于没有设置随机种子。