簡體   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