Преобразование задержки SQL по запросу PartitionBy в pandas

У меня есть таблица с некоторыми данными о покупках клиентов. Я хотел бы знать, каково было время входа и время выхода покупателя в магазине, и для этого я написал приведенный ниже SQL-запрос. Как я могу преобразовать это в python pandas?

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 |
+-------------+--------+--------+-------+-----------+-----------+

person charlie_boy    schedule 05.01.2021    source источник
comment
будет ли вариант чтения sql непосредственно в фреймворк данных с помощью pd.read_sql?   -  person YevKad    schedule 05.01.2021
comment
Пожалуйста, взгляните на этот ответ: stackoverflow.com/questions/30673209/pandas -сравнить-следующая-строка   -  person Lev Gelman    schedule 05.01.2021


Ответы (1)


df['LastEvent'] = df.sort_values(by=['Time'], ascending=True)\
                       .groupby(['ID','Name'])['EventTypeID'].shift(1)

df['NextEvent'] = df.sort_values(by=['Time'], ascending=True)\
                       .groupby(['ID','Name'])['EventTypeID'].shift(-1)

Спасибо Леву Гельману за указания. Приведенный выше код делает свое дело!

person charlie_boy    schedule 05.01.2021