繁体   English   中英

比较具有不同列名的两个数据框,并使用来自第二个数据框的列更新第一个数据框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM