我有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
答案 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())