如何根据其他数据框过滤一个 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'
我有一个数据框,我需要根据另一个数据框的开始和结束日期过滤日期
示例集如下。 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'