[英]Pandas map many to one instead of merge without dropping duplicates?
我有兩個數據框,如下所示
data_df = pd.DataFrame({'person_id': ['abc@gmail.com','abc@gmail.com','abc@gmail.com','ace@gmail.com','ace@gmail.com','pqr@gmail.com','pqr@gmail.com'],
'company': ['a','a','a','a','a','a','a'],
'dept_access':['a1','a1','a1','a1','a2','a2','a2']})
key_df = pd.DataFrame({'p_id': ['abc@gmail.com','xyz@gmail.com','pqr@gmail.com'],
'company': ['a','a','a'],
'location':['UK','USA','KOREA']})
我的目標是執行以下操作
a) 將location
列從key df
附加到data df
所以,我嘗試了如下的合並選項
data_df.merge(key_df,left_on='person_id',right_on='p_id',how='left')
但是由於合並列中的重復,這會導致比原始 data_df 更多的記錄。
因此,我想使用map
方法,因為我知道我的key_df
將為每個用戶提供一個 unique_key。 所以,我正在嘗試類似下面的東西
s = key_df.set_index(['p_id'])['location']
data_df['location'] = data_df[('person_id')].map(s)
但這也不起作用。
我希望我的輸出有 4 列,如下所示
在您的數據第二個解決方案中運行良好,在實際數據中可能首先刪除重復項:
s = key_df.drop_duplicates('p_id').set_index(['p_id'])['location']
data_df['location'] = data_df[('person_id')].map(s)
print (data_df)
person_id company dept_access location
0 abc@gmail.com a a1 UK
1 abc@gmail.com a a1 UK
2 abc@gmail.com a a1 UK
3 ace@gmail.com a a1 NaN
4 ace@gmail.com a a2 NaN
5 pqr@gmail.com a a2 KOREA
6 pqr@gmail.com a a2 KOREA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.