![](/img/trans.png)
[英]Correlation coefficient of two columns in pandas dataframe with .corr()
[英]How do I generate the Correlation Coefficient of two columns of a dataframe as a new column variable in the same dataframe?
我有一個包含三列的數據框。 ID用作我要在其中使用groupby命令的標識符。 在這里,我想為每個ID生成A和B之間的相關系數。 這是我的數據框的樣子:
ID A B
1 5 7
1 3 4
2 4 5
2 7 6
2 9 1
我想將其轉換為以下數據框:
ID A B Corr_Coeff
1 5 7 <Value 1>
1 3 4 <Value 1>
2 4 5 <Value 2>
2 7 6 <Value 2>
2 9 1 <Value 2>
這是我當前正在使用的代碼,但似乎無法正常工作:
df['Corr_Coeff'] = df.groupby('ID')[['A','B']].corr()
如果有人可以在這里幫助我,那就太好了! 提前致謝。
我相信需要通過iloc
按位置選擇行的map
,以刪除MultiIndex
使用reset_index
:
df1 = df.groupby('ID')[['A','B']].corr()
print (df1)
A B
ID
1 A 1.000000 1.000000
B 1.000000 1.000000
2 A 1.000000 -0.675845
B -0.675845 1.000000
df['corr'] = df['ID'].map(df1.iloc[0::2, 1].reset_index(level=1, drop=True))
print (df)
ID A B corr
0 1 5 7 1.000000
1 1 3 4 1.000000
2 2 4 5 -0.675845
3 2 7 6 -0.675845
4 2 9 1 -0.675845
替代為創建映射Series
由corrwith
,最后轉換1 column Dataframe
,以Series
由DataFrame.squeeze
:
s = (df[['A']].groupby(df['ID']).corrwith(df['B'])).squeeze()
print(s)
ID
1 1.000000
2 -0.675845
Name: A, dtype: float64
df['corr'] = df['ID'].map(s)
print (df)
ID A B corr
0 1 5 7 1.000000
1 1 3 4 1.000000
2 2 4 5 -0.675845
3 2 7 6 -0.675845
4 2 9 1 -0.675845
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.