Pandas的等效于Oracle的Lead/Lag函数

12 浏览
0 Comments

Pandas的等效于Oracle的Lead/Lag函数

我对pandas还很陌生,但我已经迷上了它。我正在尝试实现类似于Oracle中的Lag函数的功能。

假设你有这个DataFrame:

Date                   Group      Data
2014-05-14 09:10:00        A         1
2014-05-14 09:20:00        A         2
2014-05-14 09:30:00        A         3
2014-05-14 09:40:00        A         4
2014-05-14 09:50:00        A         5
2014-05-14 10:00:00        B         1
2014-05-14 10:10:00        B         2
2014-05-14 10:20:00        B         3
2014-05-14 10:30:00        B         4

如果这是一个Oracle数据库,并且我想按"Group"列分组并按日期排序创建一个lag函数,我可以轻松使用以下函数:

 LAG(Data,1,NULL) OVER (PARTITION BY Group ORDER BY Date ASC) AS Data_lagged

这将导致以下表格:

Date                   Group     Data    Data lagged
2014-05-14 09:10:00        A        1           Null
2014-05-14 09:20:00        A        2            1
2014-05-14 09:30:00        A        3            2
2014-05-14 09:40:00        A        4            3
2014-05-14 09:50:00        A        5            4
2014-05-14 10:00:00        B        1           Null
2014-05-14 10:10:00        B        2            1
2014-05-14 10:20:00        B        3            2
2014-05-14 10:30:00        B        4            3

在pandas中,我可以将日期设置为索引并使用shift方法:

db["Data_lagged"] = db.Data.shift(1)

唯一的问题是这并不按列进行分组。即使我将日期和组两列设置为索引,仍然会在lagged列中得到"5"。

是否有一种方法在pandas中实现类似于Lead和Lag函数的功能?

0