【问题标题】:How to filter one dataframe on the basis of other如何在另一个数据框的基础上过滤一个数据框
【发布时间】:2019-12-27 17:30:45
【问题描述】:

我有一个数据框,我需要根据另一个数据框的开始和结束日期过滤日期。

df1 的 all_dates 应该在 df2 的 start_date 和 end_date 范围内

示例集如下。 pandas 实现这一目标的最佳方法是什么?

考虑到下面的示例数据框,我已经包含了预期的结果集

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 的 start_date 和 end_date

【问题讨论】:

    标签: python python-3.x pandas pandasql


    【解决方案1】:

    首先使用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
    

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 2018-03-08
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多