繁体   English   中英

如何基于另一个过滤一个数据帧

[英]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.betweenloc进行过滤,以按列名和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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM