我有一个数据框,我需要根据另一个数据框的开始日期和结束日期过滤日期
示例集如下。熊猫实现这一目标的最佳方法是什么?
考虑以下示例数据帧,我已经包含了预期的结果集
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
答案 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'
上加入