본문 바로가기

카테고리 없음

[TIL]최소/최대 인덱스(행 번호)를 반환하는 idxmin, idxmax

목차
1. 개요
2. idxmin(), idxmax() 정의
3. 파이썬 활용 코드
4. SQL과 비교
5. 주의할 점

1. 개요

로그 데이터 EDA 과정 중 각 세션 별로 가장 빠르게 시간대가 기록된 행만 남기고 싶었다. 즉, SQL로 따지자면 세션 별 파티션을 생성하고 RANK함수를 적용하고 1인 경우만 추출하고 싶었던 것.

Python에는 파티션과 동일한 기능은 없기 때문에 다음과 같은 로직으로 추출하기로 했다.

step1. 세션 id 별로 groupby & datetime만 남겨두기
step2. idxmin 메소드 활용해 가장 빠른 시간대의 인덱스 적용
step3. .loc[]를 활용해 데이터프레임에서 행 선택

2. idxmin(), idxmax() 정의

  • idxmin() : 최소값을 가지는 인덱스 출력
  • idxmax() : 최대값을 가지는 인덱스 출력

3. 파이썬 활용 코드

# 각 세션 별로 가장 빠른 시간대 출력
visit_df.loc[visit_df.groupby('value')['event_datetime'].idxmin()]

4. SQL과 비교

WITH RankedSessions AS (
    SELECT
        *,
        RANK() OVER (PARTITION BY value ORDER BY event_datetime ASC) AS rank
    FROM
        your_table
)
SELECT *
FROM RankedSessions
WHERE rank = 1;

5. 주의할 점

만약 'event_datetime' 컬럼의 데이터타입이 datetime이 아니라 string으로 되어있다면 시간 순이 아니라 사전순으로 최소 인덱스가 반환될 수 있다. 따라서 순서를 정하고자 하는 컬럼의 데이터타입 확인 필수!!

(근데 어차피 event_datetime의 데이터타입이 string &사전순 나열일 때 최소값은 datetime인 경우와 동일하지 않을까?)