微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决比较具有不同列名的两个数据帧,并使用第二个数据帧中的列更新第一个数据帧

我正在处理两个具有不同列名和维度的数据框。

一个数据框“df1”包含单列“名称”,其名称需要位于第二个数据框中。如果匹配,则需要返回 df2 第一列 df2[0] 中的值并将其添加到 result_df

第二个数据框“df2”有多个列并且没有标题。这包含所有可能的小名和全名。任何列都可以有需要匹配的“名称

目标:在“df2”中找到“df1”中的名称,如果匹配,则返回df2第一列的值并添加到df1的相应行中

df1

姓名
ab
亚历克斯
鲍勃
罗伯特
账单

df2

0 1 2 3
艾布拉姆 ab
罗伯特 抢劫 鲍勃 罗比
亚历山大 亚历克斯 al
威廉 账单

result_df

姓名 匹配名称
ab 艾布拉姆
亚历克斯 亚历山大
鲍勃 罗伯特
罗伯特 罗伯特
账单 威廉

到目前为止我写的代码出错了。我需要把它写成一个高效的代码,因为它将用 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))

df 的输出:

    name    matched_name
0   robert  robert
1   ab      abram
2   alex    alexander
3   bill    william
4   bob     robert

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。