Python 如何在其他数据帧的基础上过滤一个数据帧
我有一个数据帧,我需要根据另一个数据帧的开始和结束日期过滤日期 df1应具有df2的开始日期和结束日期范围内的所有日期 下面给出了示例集。熊猫实现这一目标的最佳方式是什么 考虑到下面的示例数据帧,我已经包含了预期的结果集Python 如何在其他数据帧的基础上过滤一个数据帧,python,python-3.x,pandas,pandasql,Python,Python 3.x,Pandas,Pandasql,我有一个数据帧,我需要根据另一个数据帧的开始和结束日期过滤日期 df1应具有df2的开始日期和结束日期范围内的所有日期 下面给出了示例集。熊猫实现这一目标的最佳方式是什么 考虑到下面的示例数据帧,我已经包含了预期的结果集 df1 ID all_date clicks 1 2019-08-21 5 1 2019-08-22 4 1 2019-08-25 2 1 2019-08-27 2 2 2019-07-18 5 2 2019-07-21 5 2 2
df1
ID all_date clicks
1 2019-08-21 5
1 2019-08-22 4
1 2019-08-25 2
1 2019-08-27 2
2 2019-07-18 5
2 2019-07-21 5
2 2019-07-23 6
2 2019-07-25 6
2 2019-07-27 6
df2
ID start_date end_date
1 2019-08-21 2019-08-23
2 2019-07-18 2019-07-24
输出应包含日期范围,即df2的开始日期和结束日期。对于按列名称过滤,请先使用,然后使用
expected output:
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
df1['all_date'] = pd.to_datetime(df1['all_date'])
df2['start_date'] = pd.to_datetime(df2['start_date'])
df2['end_date'] = pd.to_datetime(df2['end_date'])
df = df1.merge(df2, on='ID')
df = df.loc[df['all_date'].between(df['start_date'], df['end_date']), df1.columns]
print (df)
ID all_date clicks
0 1 2019-08-21 5
1 1 2019-08-22 4
4 2 2019-07-18 5
5 2 2019-07-21 5
6 2 2019-07-23 6