根据其他数据框删除数据框的行

时间:2020-08-11 18:19:51

标签: python pandas dataframe

我有DataFrames:

df1

ID  Name     Date
1     A     19-02-2020 18:24:32
2     B     17-02-2020 16:43:52
3     C     05-02-2020 08:28:12
4     D     29-02-2020 23:32:05
5     E     01-02-2020 04:56:07

df2

ID  Name     Date
1     A     19-02-2020 17:24:32
2     B     17-02-2020 19:43:52
3     C     05-02-2020 10:28:12
4     D     29-02-2020 17:32:05
5     E     01-02-2020 05:56:07

现在我必须删除df1中的行,以使相应ID /名称的日期应小于df2,从而导致

res_df

ID  Name     Date
2     B     17-02-2020 16:43:52
3     C     05-02-2020 08:28:12
5     E     01-02-2020 04:56:07

2 个答案:

答案 0 :(得分:2)

一种方法是将DF与.merge结合在一起,使用.query.drop过滤在此过程中创建的额外列来过滤数据

(
   df1.merge(df2, on = ['ID', 'Name'], suffixes=['', '_y'])
     .query('Date < Date_y')
     .drop(columns=['Date_y'])
)
#output:
    ID  Name    Date
0   2   B       2020-02-17 16:43:52
1   3   C       2020-05-02 08:28:12
2   5   E       2020-01-02 04:56:07

答案 1 :(得分:1)

您可以这样做:

df1 = df1.set_index(['ID', 'Name'])
df2 = df2.set_index(['ID', 'Name'])
cond = df1.Date < df2.Date
print(df1[cond].reset_index())