左键加入具有相同键的多个记录的熊猫

时间:2019-05-15 13:24:03

标签: python pandas

我在熊猫中有以下数据框

df1 (LHS)
code     date         tank       product     key
123      2019-01-01   1          HS          123_2019-01-01_1
123      2019-01-01   1          HS          123_2019-01-01_1
123      2019-01-02   2          MS          123_2019-01-02_2
123      2019-01-02   1          HS          123_2019-01-02_1

df2_master (RHS)
code     date         tank       product     key
123      2019-01-01   1          MS          123_2019-01-01_1
123      2019-01-01   1          HS          123_2019-01-01_1
123      2019-01-02   2          MS          123_2019-01-02_2
123      2019-01-02   1          HS          123_2019-01-02_1

我想用左键在键上合并df1和df2_master。现在df2_master具有2个与日期为2019-01-01的相同键相关联的产品,因此我想在合并两个数据框时对其进行标记。

我想要的数据框应如下所示。

df1 (LHS)
code     date         tank       product     key                 product_df2
123      2019-01-01   1          HS          123_2019-01-01_1    More than 1 product 
123      2019-01-01   1          HS          123_2019-01-01_1    More than 1 product 
123      2019-01-02   2          MS          123_2019-01-02_2    MS
123      2019-01-02   1          HS          123_2019-01-02_1    HS

如何在大熊猫中做到这一点?

1 个答案:

答案 0 :(得分:1)

创建列product_df2来检查DataFrame.duplicated是否重复,DataFrame.drop_duplicates是否与没有重复的行合并以及numpy.where是否与最后设置的值合并:

df2_master['product_df2'] = df2_master.duplicated(subset=['key'], keep=False)
df = df1.merge(df2_master.drop_duplicates('key'), how='left', on='key', suffixes=('','_'))
df['product_df2'] = np.where(df['product_df2'], 'More than 1 product', df['product_'])

#remove unnecessary columns
df = df.loc[:, ~df.columns.str.endswith('_')]
print (df)
   code        date  tank product               key          product_df2
0   123  2019-01-01     1      HS  123_2019-01-01_1  More than 1 product
1   123  2019-01-01     1      HS  123_2019-01-01_1  More than 1 product
2   123  2019-01-02     2      MS  123_2019-01-02_2                   MS
3   123  2019-01-02     1      HS  123_2019-01-02_1                   HS