[英]Fill the “na” values with unique “na” identifier when doing pandas merge
[英]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_x
和Last Name_y
列以及Email
和Contact 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.