【问题标题】:Join pandas dataframes based on different conditions根据不同条件加入 pandas 数据框
【发布时间】:2021-06-23 12:50:45
【问题描述】:

我在 Python 中使用 Pandas,我想加入 2 个数据框。我的第一个数据框是:

id var date
1 ABCD 2019-01-01
1 ABCD 2017-06-01
1 ABCD 2016-06-01
2 ABCD 2016-01-01

我要加入的数据框是:

var date
ABCD 2019-01-01
ABCD 2017-06-01
FJKL 2016-06-01
ABCD 2016-01-01

我想通过vardate 加入第一个数据帧,但条件是第二个数据帧的日期必须小于第一个数据帧的日期。如果我在 sql 中,我会这样做:

   select 
   a.*,
   b.* 
   from fisrt_data a 
   join second_data b on a.var = b.var and a.date > b.date

有什么想法可以用 pandas 来实现吗?

【问题讨论】:

    标签: python sql pandas join merge


    【解决方案1】:

    mergequery

    (df1.merge(df2, on=['var'], suffixes=['_a','_b'])
        .query('date_a > date_b')
    )
    

    输出:

       id    var       date_a      date_b
    1    1  ABCD   2019-01-01  2017-06-01
    2    1  ABCD   2019-01-01  2016-01-01
    5    1  ABCD   2017-06-01  2016-01-01
    8    1  ABCD   2016-06-01  2016-01-01
    

    【讨论】:

    • 也加入和过滤()?
    • @eshirvana 我没有关注。 filter() 只过滤列名,不过滤数据。 query 过滤数据。
    • 我想知道我们是否可以通过 join() 和 filter() 获得相同的结果? (我正在学习熊猫)
    • @eshirvana 然后不,原因在我的其他评论中所述:-)。
    • filter() 的文档说 Subset the dataframe rows or columns according to the specified index labels. ,所以我假设它应该适用于过滤行
    猜你喜欢
    • 2022-11-26
    • 2021-06-20
    • 2021-03-02
    • 2023-01-08
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2021-07-21
    相关资源
    最近更新 更多