我在熊猫中有以下数据框
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
如何在大熊猫中做到这一点?
答案 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