[英]Pandas - merge/join/vlookup df and delete all rows that get a match
[英]Vlookup in Pandas - Join or Merge?
我正在嘗試使用pandas復制Vlookup Excel功能。 我使用了Join和Merge,這兩種方法都給我錯誤的結果。
Df1有15列,帶有整數和文本值,Df2有6列,主要是文本。
我試圖使用列標簽'Created By'將用戶詳細信息從Df2帶入Df1。
Df1看起來像這樣:
CA# CreatedBy $
9xxx12 User 1 10
9xxx13 User 2 20
9xxx14 User 3 25
Df2看起來像這樣:
CreatedBy Role
User 1 Sales
User 2 Maintenance
User 3 Operations
我的預期結果將是:DfMerged
CA# CreatedBy $ User Role
9xxx12 User 1 10 Sales
9xxx13 User 2 20 Maintenance
9xxx14 User 3 25 Operations
我嘗試了以下代碼變體,但是當Df2中的數據匹配時,它們不匹配所有用戶ID,在Df1中留下一些空白。
merged= data_fr1.merge(data_fr2, on=['Created By'], how='left')
merged2= pd.merge(data_fr1, data_fr2, left_on='Created By',
right_on='Created By', how='left')
有人指出這篇文章的答案: 熊貓合並101
但我仍然沒有得到正確的結果。 “CreatedBy”字段未填充Df1中的所有用戶。 該字段是文本和數字的混合,例如:User1,User2等。我想知道數據類型是否干擾了結果。
這不能讓你得到你想做的合並嗎? 我不確定為什么你有角色的空列和用戶下的所有內容,但你可以重命名列。
print('df')
print(df)
print('df2')
print(df2)
print('out_df')
print(out_df)
df.merge(df2[['By', 'Role']], on='By')
df
CA# Created By $
0 9xxx12 User 1 10
1 9xxx13 User 2 20
2 9xxx14 User 3 25
df2
Created By Role
0 User 1 Sales
1 User 2 Maintenance
2 User 3 Operations
out_df
CA# Created By $ User Role
0 9xxx12 User 1 10 Sales NaN
1 9xxx13 User 2 20 Maintenance NaN
2 9xxx14 User 3 25 Operations NaN
Out[40]:
CA# Created By $ Role
0 9xxx12 User 1 10 Sales
1 9xxx13 User 2 20 Maintenance
2 9xxx14 User 3 25 Operations
編輯:對不起,一些問題是剪貼板解析。 邏輯適用。 如果您仍然遇到問題,可否提供未正確連接的“線路”示例?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.