DataFrame의 groupby에 매소드 적용
python의 Groupby 함수를 활용하는 다양한 방법을 알아보겠습니다.
데이터는 아래 kaggle 링크의 event.csv 데이터를 활용하였습니다.
https://www.kaggle.com/datasets/mkechinov/ecommerce-events-history-in-electronics-store
데이터 불러오기
import pandas as pd
df = pd.read_csv("events.csv")
df["event_time"] = pd.to_datetime(df["event_time"])
df["date"] = df["event_time"].dt.strftime('%Y-%m-%d')
groupby에 함수를 적용하는 방법
1. groupby에 메소드를 바로 적용하는 방법
df.groupby(["brand"])["user_id"].count().reset_index()
2. agg 함수를 활용해서 메소드를 적용시키는 방법이 있습니다. -> 여러가지 method 를 적용가능
df.groupby(["brand"]).agg({"user_id" : "count"}).reset_index()
이번 포스팅에서는 주로 2번 방식을 활용해서 다양하게 groupby를 활용하는 방법을 소개하겠습니다.
참고로 메소드로 활용 가능한 함수는 아래 링크에서 활용 가능합니다.
https://pandas.pydata.org/docs/reference/groupby.html
여러개의 컬럼을 기준으로 집계하기
event_type와 brand별로 개수를 세어보겠습니다.
df.groupby(["event_type", "brand"])["user_id"].count().reset_index()
여러 컬럼에 다양한 메소드를 적용
event_type가 "view"인 case를 대상으로 user_id별로 어떤 brand를 봤는지(unique), 처음 유입된 날짜(first)는 언제인지를 집계해보겠습니다.
df[df["event_type"] == "view"].groupby(["user_id"]).agg({"brand" : "unique", "date" : "first"}).reset_index()
하나의 컬럼에 여러 메소드를 적용
event_type가 "view"인 case를 대상으로 user_id별로 price컬럼을 'count', 'mean', 'min', 'max' 메소드로 집계해보겠습니다.
df[df["event_type"] == "view"].groupby(["user_id"]).agg({"price" : ['count', 'mean', 'min', 'max']}).reset_index()
튜플을 활용하면 컬럼의 이름도 재지정할 수 있습니다
df[df["event_type"] == "view"].groupby(["user_id"]).agg({"price" : [('횟수', 'count'), ('평균', 'mean'), ('최소값', 'min'), ('최대값', 'max')]}).reset_index()
메소드 대신에 사용자 정의 함수를 적용
event_type가 "view"인 case를 대상으로 user_id별로 첫 유입 날짜와 마지막 유입날짜의 사이를 집계하는 사용자 정의 함수를 및 price의 Interquartile range(IQR)을 구하는 사용자 정의 함수를 적용해보겠습니다.
def date_interval(event_time):
first_date = min(event_time)
last_date = max(event_time)
date_diff = (last_date - first_date).days
return date_diff
def iqr(x):
q3, q1 = np.percentile(x, [75, 25])
iqr = q3 - q1
return iqr
df[df["event_type"] == "view"].groupby(["user_id"]).agg({"event_time" : date_interval, "price" : iqr}).reset_index()
'Data Engineering > Python' 카테고리의 다른 글
[Python/GoogleSpreadSheet API] GoogleSpreadSheet API 연동하기 (2) (0) | 2023.09.12 |
---|---|
[Python/GoogleSpreadSheet API] GoogleSpreadSheet API 연동하기 (1) (0) | 2023.09.10 |
[Python] 파이썬과 구글 드라이브 연동하고 파일 업로드/다운로드 하기 (Google Drive) (3) | 2022.02.13 |
[Python] 파이썬으로 파일 첨부하여 메일 보내기(Gmail)(SMTP / MIME) (1) | 2022.02.06 |
[Python] 데이터를 MYSQL DB에 적재/ 업데이트 하는 방법 (MYSQL WORKBENCH / Upsert / to_sql) (2) | 2022.01.09 |