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] 
  • Pandas, общая сумма вычислений на каждом подуровне MultiIndex
  • Преобразование объекта Pandas tseries в DataFrame
  • Круговая зависимость в кадре данных панд
  • pandas.DataFrame.apply () не удалось после pandas.to_datetime ()
  • binning dataframe в пандах в Python
  • Преобразование индекса в MultiIndex (иерархический индекс) в Pandas
  • Комбинируйте 2 кадра данных панд в соответствии с булевым вектором
  • Pandas Python - может использоваться с векторизованными входами
  • Python - лучший язык программирования в мире.