[英]Exactly Vlookup functionality in Pandas
I have 2 Dataframes.我有 2 个数据框。 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 添加额外的列让我们说“S&P Number”并通过从 Holdings 获取 S&P 并查看评级地图然后返回 Number 值来执行 Vlookup。
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请注意,在这种情况下我们没有一个键,如果我想覆盖所有 3 个评分并进行合并,我必须始终删除附加列,因为
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":不使用“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.最终结果将包含我必须放弃的“S&P”和“Rating_S&P”)。 I was wondering if there is any better way to do that - like vlookup?
我想知道是否有更好的方法来做到这一点 - 比如 vlookup?
Just use RatingsMap['Fitch']
for right_on
and remove 'Fitch'
in the initial field.只需将
RatingsMap['Fitch']
用于right_on
并删除初始字段中的'Fitch'
。 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我的数据框被命名为 df & df1 而不是 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.