import pandas as pd
d = {'Val1': ['A','A','A','B','B','B','C','C','C','D','D','D'], 'Val2':
[5,4,6,4,8,7,4,5,2,1,1,9] , 'Val3': [4, 5,6,1,2,9,8,5,1,5,9,5]}
df = pd.DataFrame(data=d)
df
Val1 Val2 Val3 Val4+++
0 A 5 4
1 A 4 5
2 A 6 6
3 B 4 1
4 B 8 2
5 B 7 9
6 C 4 8
7 C 5 5
8 C 2 1
9 D 1 5
10 D 1 9
11 D 9 5
可以使用此代码计算两列的相关性,但是我不确定这是最好/最快的方法。
vers1=df.groupby('Val1')[['Val2','Val3']].corr().iloc[0::2][['Val3']]
vers2=df.groupby('Val1')[['Val2','Val3']].corr().iloc[0::2]['Val3']
A Val2 0.500000
B Val2 0.385727
C Val2 0.714575
D Val2 -0.500000
我无法将数据连接到原始数据,因此它们看起来像这样。
Val1 Val2 Val3 Val4+++
0 A 5 4 0.500000
1 A 4 5 0.500000
2 A 6 6 0.500000
3 B 4 1 0.385727
4 B 8 2 0.385727
5 B 7 9 0.385727
6 C 4 8 0.714575
7 C 5 5 0.714575
8 C 2 1 0.714575
9 D 1 5 -0.500000
10 D 1 9 -0.500000
11 D 9 5 -0.500000
如果我能够将它们与原始联系在一起,我愿意采用其他方法来计算相关性或关联性度量。
答案 0 :(得分:0)
我希望您正在寻找:
在merge
函数上进行一些微调会有所帮助。
import pandas as pd
d = {'Val1': ['A','A','A','B','B','B','C','C','C','D','D','D'], 'Val2': [5,4,6,4,8,7,4,5,2,1,1,9] , 'Val3': [4, 5,6,1,2,9,8,5,1,5,9,5]}
df = pd.DataFrame(data=d)
df
corr=df.groupby('Val1')[['Val2','Val3']].corr().groupby('Val1').min()[['Val3']]
corr
Out[42]:
Val3
Val1
A 0.500000
B 0.385727
C 0.714575
D -0.500000
out=pd.merge(df,corr,on='Val1',how='inner')
out
out
Out[43]:
Val1 Val2 Val3_x Val3_y
0 A 5 4 0.500000
1 A 4 5 0.500000
2 A 6 6 0.500000
3 B 4 1 0.385727
4 B 8 2 0.385727
5 B 7 9 0.385727
6 C 4 8 0.714575
7 C 5 5 0.714575
8 C 2 1 0.714575
9 D 1 5 -0.500000
10 D 1 9 -0.500000
11 D 9 5 -0.500000
答案 1 :(得分:0)
您可以通过对系列进行相关来缩短相关代码:
df.groupby("Val1")["Val2"].corr(df["Val3"])