簡體   English   中英

合並后在數據框中填充na值

[英]Fill na values in dataframe after merge

我有 2 個數據框,我想合並名字並聯系電子郵件,返回 df2 中的所有值。

數據樣本:

df1 = pd.DataFrame([['Elle', 'Kelly', 'ellemoore@email.com', 2],
['Amanda','Johnson', 'johnson.amanda@email.com', 5], 
['Jay', 'Rogers', 'jay.rogers@email.com', 4], 
['David','Connor', 'famconnor@email.com', 3],
['Rachel','Connor','famconnor@email.com', 2],
['Anne','Smith','anniesmith@email.com', 4],
['Anne','Smith', 'asmith@email.com', 2],
['Dani', 'Carter', 'daniellecarter@email.com', 3],
['Drake', 'Walker', 'dwalker@email.com', 2]], 
columns = ['First Name', 'Last Name', 'Email', 'Rating'])

df2 = pd.DataFrame([[np.nan, np.nan, np.nan, 1040, 'City'], 
['Dani','Carter-Hampton', 'daniellecarter@email.com', 1040, 'New York'],
['Anne','Smith','anniesmith@email.com', 1040, 'New York'], 
['David', 'Connor', 'famconnor@email.com', 1040, 'Chicago'], 
['Jay', 'Rogers','jrogers@email.com', 1040, 'Los Angeles'], 
['Anne','Smith', 'asmith@email.com', 1040, 'Houston'],
['Amanda','Johnson','johnson.amanda@email.com', 1040, 'Los Angeles'],
['Rachel', 'Connor', 'famconnor@email.com', 1040, 'Chicago'],
['Elle', 'Moore-Kelly', 'moorekellyentertainment@email.com', 1040, 'Los Angeles'],
['Drake', 'Walker', 'walkerproductions@email.com', 1040, 'Los Angeles']],
columns = ['First Name','Last Name','Contact Email','Movie Id','Location'])

合並

merged = df1.merge(df2, left_on = ['First Name', 'Email'], right_on =  ['First Name', 'Contact Email'], how = 'right')

合並的輸出在此處輸入圖像描述

問題是由於兩個表中名稱和電子郵件之間的差異,某些行無法匹配,因此我想對名字和姓氏執行另一次合並以填充缺失的 nan 值。 我嘗試使用 combine_first 函數,但由於索引不同,它會導致行不匹配和重復。 我該怎么做?

第一次合並后的所需輸出以填充 na 值

在此處輸入圖像描述

基於@Lazyer 的評論,我將使用 pandas 方法鏈接並使用combine_first來組合Last Name_xLast Name_y列以及EmailContact Email

merged = (
    df1
    .merge(df2, left_on=['First Name', 'Email'], right_on=['First Name', 'Contact Email'], how ='right')
    .assign(**{
        'Last Name': lambda x: x['Last Name_x'].combine_first(x['Last Name_y']),
        'Email': lambda x: x['Email'].combine_first(x['Contact Email'])
    })
    .drop(['Last Name_x', 'Last Name_y', 'Contact Email'], axis='columns')
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM