我的数据框看起来像这样(但更长......):
imd code sum
0 1 010101 1048171
1 2 010101 911003
2 3 010101 852023
3 4 010101 790893
4 5 010101 923344
5 6 010101 681473
6 7 010101 600303
7 8 010101 497439
8 9 010101 496209
9 10 010101 388457
10 1 010102 26284506
11 2 010102 23567345
12 3 010102 24933988
13 4 010102 22762737
14 5 010102 23205722
15 6 010102 21874259
16 7 010102 21604496
17 8 010102 16723338
18 9 010102 17691183
19 10 010102 15202808
现在,我想计算数据框中imd
的每个唯一值的sum
和code
之间的相关性。因此,在此示例中,代码imd
的{{1}}和sum
之间,代码010101
等的相关性
然后我想要生成具有最高相关性的代码的排序列表。所以像这样:
010102
最好的方法是什么?我知道如何计算整个数据框的 code correlation
010102 0.44
010101 0.38
....
和imd
之间的相关性:
sum
但不是如何对作为唯一代码的数据帧的每个切片重复执行此操作。
我想我可以为每个唯一的代码值创建一个新的数据帧,为每个代码计算df[['imd','sum']].corr()
和imd
之间的相关性,然后创建一个中间数据结构来保存相关值?
答案 0 :(得分:1)
我显然对这个问题的理解与其他问题不同。 IIUC,你想要的是,根据code
值,将另外两列视为向量,并找到它们的相关系数。这将是:
import numpy as np
>>> df.groupby(df.code).apply(lambda g: np.corrcoef(g.imd.values, g['sum'].values)[0][1]).sort_values()
code
10101 -0.955634
10102 -0.936554
dtype: float64
答案 1 :(得分:0)
首先,您需要groupby
code
列,然后根据imd
和sum
列应用相关性,如下所示:
df
Out[6]:
imd code sum
0 1 10101 1048171
1 2 10101 911003
2 3 10101 852023
3 4 10101 790893
4 5 10101 923344
5 6 10101 681473
6 7 10101 600303
7 8 10101 497439
8 9 10101 496209
9 10 10101 388457
10 1 10102 26284506
11 2 10102 23567345
12 3 10102 24933988
13 4 10102 22762737
14 5 10102 23205722
15 6 10102 21874259
16 7 10102 21604496
17 8 10102 16723338
18 9 10102 17691183
19 10 10102 15202808
df.groupby('code')[['imd','sum']].corr()
Out[7]:
imd sum
code
10101 imd 1.000000 -0.955634
sum -0.955634 1.000000
10102 imd 1.000000 -0.936554
sum -0.936554 1.000000