从 Dataframe 中检索的行在另一个 Dataframe Pandas中不存在

edqdpe6u  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(136)

我需要df1中的行不存在于基于3列[Time1,ID1,Order1]的df2中。我需要df3中的行不存在于df2中注意:Time1采用日期时间格式,
示例
输入
DF1
| 时间1|识别码1|订单1|
| - ------|- ------|- ------|
| 2022年12月14日下午6:10:32|十|A类|
| 2022年9月15日上午2:45:57|是|乙|
| 2022年9月15日上午11:08:26|Z型|C级|
DF2
| 时间2|识别码2|订单2|
| - ------|- ------|- ------|
| 2022年12月14日下午6:15:35|十|A类|
| 2022年12月14日下午6:00:35|是|乙|
| 2022年9月15日上午2:45:57|是|乙|
输出df3
| 时间1|识别码1|订单1|
| - ------|- ------|- ------|
| 2022年12月14日下午6:10:32|十|A类|
| 2022年9月15日上午11:08:26|Z型|C级|

z0qdvdin

z0qdvdin1#

使用带指示器和索引的merge

df3 = df1.loc[df1.merge(df2, left_on=['Time1', 'ID1', 'Order1'],
                             right_on=['Time2', 'ID2', 'Order2'],
                        how='left', indicator=True)
                 .query('_merge == "left_only"').index
             ]

或者:

df3 = df1.loc[df1.merge(df2, left_on=['Time1', 'ID1', 'Order1'],
                             right_on=['Time2', 'ID2', 'Order2'],
                        how='left', indicator=True)
                 ['_merge'].eq('left_only')
             ]

输出:

Time1 ID1 Order1
0  12/14/2022 6:10:32 PM   X      A
2  9/15/2022 11:08:26 AM   Z      C

相关问题