首页 > 解决方案 > 特定日期的过滤器组

问题描述

我有一个带有 user_id 和日期的表

|user_id|date_2check|
---------------------
|   1   | 2020-02-01|
|   2   | 2020-01-05|

然后是一张包含历史数据的表格

|row_id|user_id|everyday_checkin|
---------------------------------
|   1   |   1   |   2020-01-01   |
|   2   |   1   |   2020-01-04   |
|   3   |   1   |   2020-01-08   |
|   4   |   1   |   2020-01-12   |
|   5   |   1   |   2020-02-01   |
|   6   |   1   |   2020-06-01   |
|   7   |   2   |   2020-12-31   |

我想从历史表中过滤掉所有比第一个表大的行,所以它看起来像:

|row_id|user_id|everyday_checkin|
---------------------------------
|   1   |   1   |   2020-01-01   |
|   2   |   1   |   2020-01-04   |
|   3   |   1   |   2020-01-08   |
|   4   |   1   |   2020-01-12   |
|   5   |   1   |   2020-02-01   |

请注意,row_id 6 被删除,因为日期比第一个表更早,而 user_id 2 消失,因为他在表 2 中没有低于他的日期的条目。

谢谢

标签: pythonpandas

解决方案


用于Series.map可能的 comparedate来自另一个DataFrame并比较 bySeries.ge以获得更大或等于:

print (df2['user_id'].map(df1.set_index('user_id')['date_2check']))
0   2020-02-01
1   2020-02-01
2   2020-02-01
3   2020-02-01
4   2020-02-01
5   2020-02-01
6   2020-01-05
Name: user_id, dtype: datetime64[ns]

m = df2['user_id'].map(df1.set_index('user_id')['date_2check']).ge(df2['everyday_checkin'])
df = df2[m]

print (df)
   row_id  user_id everyday_checkin
0       1        1       2020-01-01
1       2        1       2020-01-04
2       3        1       2020-01-08
3       4        1       2020-01-12
4       5        1       2020-02-01

推荐阅读