Pandas эквивалент функции Oracle Lead / Lag

Сначала я новичок в пандах, но я уже влюбился в это. Я пытаюсь реализовать эквивалент функции Lag от Oracle.

Предположим, у вас есть этот 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 

Если это была база данных оракула, и я хотел создать функцию задержки, сгруппированную по столбцу «Группа» и упорядоченную по дате, я мог бы легко использовать эту функцию:

  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 

В пандах я могу установить дату как индекс и использовать метод сдвига:

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

Единственная проблема заключается в том, что это не группируется по столбцу. Даже если я установил два столбца Date и Group в качестве индексов, я бы все равно получил «5» в столбце с запаздыванием.

Есть ли способ реализовать эквивалент функций Lead и lag в Pandas?

One Solution collect form web for “Pandas эквивалент функции Oracle Lead / Lag”

Вы можете выполнить операцию groupby / apply (shift) :

 In [15]: df['Data_lagged'] = df.groupby(['Group'])['Data'].shift(1) In [16]: df Out[16]: Date Group Data Data_lagged 2014-05-14 09:10:00 A 1 NaN 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 NaN 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 [9 rows x 4 columns] 
  • datetime to string with series in python pandas
  • Использование pandas fillna () на нескольких столбцах
  • Группировка индекса даты в пандах
  • Pandas интерполирует данные с единицами
  • Построение нескольких строк с помощью блока данных pandas
  • Как добавить строку заголовка в pandas DataFrame
  • Комплексная работа карты на двух данных в пандах с условием
  • проблемы в "pandas datetime convert to num"
  • Групповые операции в столбце Pandas, содержащие списки
  • Неожиданные результаты методов min () и max () серии Pandas из объектов Timestamp
  • вычисление длины заклинаний данных на основе равенства в пандах
  • Python - лучший язык программирования в мире.