Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在其他数据帧的基础上过滤一个数据帧_Python_Python 3.x_Pandas_Pandasql - Fatal编程技术网

Python 如何在其他数据帧的基础上过滤一个数据帧

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应具有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  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