I have 2 Dataframes. I excel i would add additional columns to Holdings lets say “S&P Number” and perform Vlookup by taking S&P from Holdings and look in Rating Map then return Number value.
Holdings =
Security Buy/Sell Rating_S&P Rating_Moody Rating_Fitch
XS1843430536 B_T (P)AAA N.A. AAAe
US912810EH78 BUY N.A. Aaa AAAu
US912828F213 BUY N.A. Aaa AAAu
US912828G872 BUY N.A. Aaa AAAu
US912828G872 BUY N.A. Aaa AAAu
Ratings Map =
Fitch Moody´s S&P DBRS Number_# Final_Rating
NaN NaN NaN NaN 23 NaN
AAA Aaa AAA AAA 22 AAA
AAAu NaN NaN AAAu 22 NaN
AAAe Aaae NaN NaN 22 NaN
AAA/NR (P)Aaa (P)AAA (P)AAA 22 NaN
AAA/*- Aaa/*- NaN NaN 22 NaN
NaN Aaau NaN NaN 22 NaN
AA+ Aa1 AA+ AAhigh 21 AA+
NaN Aa1u NaN NaN 21 NaN
NaN Aa1/*+ AA+/*+ AAH 21 NaN
Please note that we dont have one key in this situation, if i want to cover all 3 Ratings and go with merge i have to always drop additional column because
Holdings = Holdings.merge(RatingsMap[['Fitch,'Number #]],left_on='Rating_
Fitch', right_on='Fitch', how ='inner']
Output:
Security Buy/Sell Rating_S&P Rating_Moody Rating_Fitch Number_# Fitch
XS1843430536 B_T (P)AAA N.A. AAAe 22.0 AAAe
US912810EH78 BUY N.A. Aaa AAAu 22.0 AAAu
US912828F213 BUY N.A. Aaa AAAu 22.0 AAAu
US912828G872 BUY N.A. Aaa AAAu 22.0 AAAu
US912828G872 BUY N.A. Aaa AAAu 22.0 AAAu
Desired Output without using “drop”:
Security Buy/Sell Rating_S&P Rating_Moody Rating_Fitch Number_#
XS1843430536 B_T (P)AAA N.A. AAAe 22.0
US912810EH78 BUY N.A. Aaa AAAu 22.0
US912828F213 BUY N.A. Aaa AAAu 22.0
US912828G872 BUY N.A. Aaa AAAu 22.0
US912828G872 BUY N.A. Aaa AAAu 22.0
Final result will contain both “S&P” and “Rating_S&P”) which i have to drop. I was wondering if there is any better way to do that – like vlookup?
Advertisement
Answer
Just use RatingsMap['Fitch']
for right_on
and remove 'Fitch'
in the initial field. Like below.
Holdings = Holdings.merge(RatingsMap[['Number #]],left_on='Rating_Fitch', right_on= RatingsMap['Fitch'], how ='inner']
Below is what i have done & the output is also shown
df2 = df.merge(df1[['Number_#']],left_on='Rating_Fitch', right_on=df1['Fitch'], how ='inner')
My dataframes are named as df & df1 instead of Holdings & Ratingsmap
output
Security Buy/Sell Rating_S&P Rating_Moody Rating_Fitch Number_#
XS1843430536 B_T (P)AAA N.A. AAAe 22
US912810EH78 BUY N.A. Aaa AAAu 22
US912828F213 BUY N.A. Aaa AAAu 22
US912828G872 BUY N.A. Aaa AAAu 22
US912828G872 BUY N.A. Aaa AAAu 22