【发布时间】:2021-10-31 20:03:56
【问题描述】:
首先我是 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 数据库,我想创建一个按“组”列分组并按日期排序的滞后函数,我可以轻松使用此函数:
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)
唯一的问题是它没有按列分组。即使我将 Date 和 Group 两列设置为索引,我仍然会在滞后列中得到“5”。
有没有办法在 Pandas 中实现等效的 Lead 和 lag 函数?
【问题讨论】: