如何在其他数据框的基础上过滤一个熊猫数据框的日期

时间:2019-08-22 09:47:03

标签: python python-3.x pandas pandasql

我有一个数据框,我需要根据另一个数据框的开始日期和结束日期过滤日期

示例集如下。熊猫实现这一目标的最佳方法是什么?

考虑以下示例数据帧,我已经包含了预期的结果集

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

1 个答案:

答案 0 :(得分:1)

您可以先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'上加入