[英]Compare two data-frames with different column names and update first data-frame with the column from second data-frame
我正在研究两个具有不同列名和维度的数据框。
第一个数据帧“df1”包含单列“名称”,其名称需要位于第二个数据帧中。 如果匹配,则需要返回 df2 第一列 df2[0] 的值并将其添加到 result_df
第二个数据帧“df2”有多个列,没有 header。 这包含所有可能的小名和全名。 任何列都可以有需要匹配的“名称”
目标:在“df2”中找到“df1”中的名称,如果匹配,则从 df2 的第一列返回值并添加到 df1 的相应行中
df1
姓名 |
---|
抗体 |
亚历克斯 |
鲍勃 |
罗伯特 |
账单 |
df2
0 | 1 | 2 | 3 |
---|---|---|---|
亚伯兰 | 抗体 | ||
罗伯特 | 抢 | 鲍勃 | 罗比 |
亚历山大 | 亚历克斯 | 人 | |
威廉 | 账单 |
结果_df
姓名 | 匹配名称 |
---|---|
抗体 | 亚伯兰 |
亚历克斯 | 亚历山大 |
鲍勃 | 罗伯特 |
罗伯特 | 罗伯特 |
账单 | 威廉 |
到目前为止我编写的代码给出了错误。 我需要将其编写为高效代码,因为它将使用 df2 检查 df1 中的数百万个条目:
''' result_df = process_name(df1, df2)
定义进程名称(df1,df2):
for elem in df2.values:
if elem in df1['name']:
df1["matched_name"] = df2[0]
'''
尝试通过concat()
、 merge()
、 drop()
和rename()
和reset_index()
方法:
df=(pd.concat((df1.merge(df2,left_on='name',right_on=x) for x in df2.columns))
.drop(['1','2','3'],1)
.rename(columns={'0':'matched_name'})
.reset_index(drop=True))
Output 的df
:
name matched_name
0 robert robert
1 ab abram
2 alex alexander
3 bill william
4 bob robert
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.