如何根据其他数据框过滤一个 pandas 数据框日期

How to filter one pandas dataframe dates on the basis of other dataframe

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

示例集如下。 pandas 实现该目标的最佳方法是什么?

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

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'