我有一个包含一些顾客购买数据的表。我想知道顾客在商店的进入时间和离开时间&我已经为此编写了下面的SQL查询。我如何将其转换为python panda?
SELECT MyTable.*,
LAG(EventTypeID, 1, 0)
OVER ( PARTITION BY ID,Name
ORDER BY Time) AS LastEvent ,
LEAD(EventTypeID, 1, 0)
OVER ( PARTITION BY ID,Name
ORDER BY Time) AS NextEvent
FROM DL.dbo.DataTable MyTable
输入:
+-------------+--------+--------+-------+
| EventTypeID | ID | Name | Time |
+-------------+--------+--------+-------+
| 1 | QWERTY | Joseph | 10.20 |
| 1 | QWERTY | Joseph | 10.25 |
+-------------+--------+--------+-------+
预期结果:
+-------------+--------+--------+-------+-----------+-----------+
| EventTypeID | ID | Name | Time | LastEvent | NextEvent |
+-------------+--------+--------+-------+-----------+-----------+
| 1 | QWERTY | Joseph | 10.20 | 0 | 1 |
| 1 | QWERTY | Joseph | 10.25 | 1 | 0 |
+-------------+--------+--------+-------+-----------+-----------+
2条答案
按热度按时间ifmq2ha21#
感谢Lev Gelman提供的指导。上面的代码就可以做到这一点!
2ul0zpep2#
我只是在一个更复杂的情况下才发现这一点。我们必须在这里使用df.join(),因为shift()方法会移动 Dataframe 的索引,而.join()会对索引起作用。出于某种原因,我还没有弄清楚,在.join()中使用'on'操作符确实会把事情搞砸。