Pandas的等效于Oracle的Lead/Lag函数
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函数的功能?