python - 特定日期的过滤器组
问题描述
我有一个带有 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 中没有低于他的日期的条目。
谢谢
解决方案
用于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
推荐阅读
- r - 部署闪亮的应用程序时,将传单地图下载为 png
- c++ - 查找两者之间的两个数字的正则表达式的匹配
- sql-server - 数据库大小超过 10GB 时的 SQL Server Enterprise 超时异常
- database - 在 for 循环中使用 db 连接时内存泄漏
- python-3.x - 在 python selenium 中使用 send_key() 函数时出现错误“ElementNotInteractableException:消息:元素不可交互”
- node.js - 码头工人之间的redis和nodejs连接问题
- racket - 收集列表中的值
- http - 域转发:重定向到专用网络中的站点
- mysql - 如何在 Ubuntu 中访问 Mysql?
- django - Django 模板 - 按块生成和保存 XML 文件(以节省 RAM)