복붙노트

[PYTHON] 오라클 리드 / 래그 기능과 동일한 팬더

PYTHON

오라클 리드 / 래그 기능과 동일한 팬더

처음에는 팬더를 처음 접했지만 이미 사랑에 빠져 있습니다. 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

이것이 오라클 데이터베이스이고 "그룹"열에 의해 그룹화되고 날짜 순으로 지연 기능을 생성하려면이 기능을 쉽게 사용할 수 있습니다.

 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

팬더에서 날짜를 인덱스로 설정하고 shift 메서드를 사용할 수 있습니다.

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

유일한 문제는 이것이 열별로 그룹화되지 않는다는 것입니다. 날짜와 그룹 두 개의 열을 인덱스로 설정하더라도 지연된 열에는 여전히 "5"가 표시됩니다.

팬더에서 리드 및 래그 기능을 구현하는 방법이 있습니까?

해결법

  1. ==============================

    1.groupby / apply (shift) 작업을 수행 할 수 있습니다.

    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]
    
  2. from https://stackoverflow.com/questions/23664877/pandas-equivalent-of-oracle-lead-lag-function by cc-by-sa and MIT license