【问题标题】:pandas - self-join with date comparisonpandas - 自加入日期比较
【发布时间】:2020-08-20 07:39:15
【问题描述】:

给定一个 Pandas 数据框 df

     date         numeric_field
0   2019-06-06       n
1   2019-06-07       n
2   2019-06-08       n

我想对日期进行自联接并将函数应用于numerical_field

在 SQL 中我会这样做:

SELECT a.date,
        FUN(b.numeric_field))) new_field
        FROM df a
        INNER JOIN df b
        ON b.date < a.date 
        WHERE a.date > '2019-06-06'
        AND a.date <= '2019-06-08'
        AND b.date >= '2019-06-06'
        GROUP BY a.date 

结果应该是:

     date           new_field
0   2019-06-07       fun(n)
1   2019-06-08       fun(n)

【问题讨论】:

    标签: python pandas numpy merge self-join


    【解决方案1】:

    我能想到的最快的方法是交叉合并和查询:

    df = df.assign(dummy=1)
    
    (df.merge(df, on='dummy', suffixes=['','_r'])
       .query('"2019-06-06"<=date_r<date<="2019-06-08"')       # filter
       .assign(new_field=lambda x: x['numeric_field'].sum())   # replace the function in `lambda`
       [['date','new_field']]
    )
    

    输出:

             date new_field
    3  2019-06-07       nnn
    6  2019-06-08       nnn
    7  2019-06-08       nnn
    

    【讨论】:

    • 而不是x['numeric_field'] 应该是x['numeric_field_r']
    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2011-12-31
    相关资源
    最近更新 更多