pandas - 通过日期比较进行自连接。

问题描述 投票:0回答:1

给定一个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个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.