簡體   English   中英

熊貓映射多對一而不是合並而不刪除重復項?

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

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