python - 如何根据其他数据框过滤一个熊猫数据框日期
问题描述
我有一个数据框,我需要根据另一个数据框的开始和结束日期过滤日期
下面给出了示例集。大熊猫实现这一目标的最佳方法是什么?
考虑到如下示例数据框,我已经包含了预期的结果集
df1
ID all_date clicks
1 2019-08-21 5
1 2019-08-22 4
2 2019-07-18 5
2 2019-07-21 5
2 2019-07-23 6
df2
ID start_date end_date
1 2019-08-21 2019-08-21
2 2019-07-18 2019-08-21
预期输出:
df1
ID all_date clicks
1 2019-08-21 5
2 2019-07-18 5
2 2019-07-21 5
解决方案
你可以melt
然后merge
:
首先最好将日期转换为日期时间,以防它们是字符串:
df1.all_date=pd.to_datetime(df1.all_date)
df2[['start_date','end_date']]=df2[['start_date','end_date']].apply(pd.to_datetime)
df1.merge(df2.melt('ID',value_name='all_date').drop('variable',1),on=['ID','all_date'])
ID all_date clicks
0 1 2019-08-21 5
1 1 2019-08-21 5
2 2 2019-07-18 5
详细信息,当melt
你得到:
df2.melt('ID',value_name='all_date').drop('variable',1)
ID all_date
0 1 2019-08-21
1 2 2019-07-18
2 1 2019-08-21
3 2 2019-08-21
然后加入'ID','all_date'
两个数据框
推荐阅读
- oracle - ORA-24247: 访问控制列表 (ACL) 拒绝网络访问 - 错误
- javascript - div 点击不像鼠标点击
- java - Android Studio Java:无法将图像从网络下载到应用程序中
- javascript - 如何将动态 url 链接到 jquery 中的标签?
- azure-cosmosdb - CosmoDB:由于目标机器主动拒绝,无法建立连接。[::1]:10255
- python - 空闲运行的任何python代码都可以访问所有已安装的ram吗?
- python - 使用跨多列的列表理解将所有非 NaN 值转换为 1
- python - 如何在 Spyder Notebook 上渲染 Displacy?
- ruby-on-rails - Rails如何使用join在另一个表中仅查找具有关联的has_one对象的对象
- python - 将 hyperopt 包与 SOM 一起使用