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