基于其他数据帧删除数据帧的行



>我有数据帧:

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/Name 的日期应小于 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

一种方法是将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

你可以做:

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

最新更新