[英]How to filter one dataframe on the basis of other
我有一个数据框,我需要根据另一数据框的开始和结束日期过滤日期。
df1的all_dates应该在df2的start_date和end_date范围内
示例集如下。 熊猫实现这一目标的最佳方法是什么?
考虑以下示例数据帧,我已经包含了预期的结果集
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
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
输出应包含日期范围,即df2的开始日期和结束日期
首先使用DataFrame.merge
Series.between
与loc
进行过滤,以按列名和boolean indexing
进行过滤:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.