[pandas] grouped 객체 for문에 사용하기

2025. 8. 17. 09:30·데이터분석/데이터 전처리

안녕하세요 먼지입니다.

 

gpt를 쓰면서 작업을 하게 되는데 가끔 사용해본 적 없는 코드를 짜주는 경우가 있습니다. 좋은 코드인데도 몰랐던 경우들이 있어 하나씩 정리해보려 합니다. 이번에 정리해볼 grouped객체를 for문에서 사용하는 법입니다. 동적으로 group by를 해주는 전처리 과정에서 사용했던 코드인데, 언뜻보면 group by를 하는 거 같지만 필터링 기능이라고 보시면 좋을 것 같습니다. 

 

작동 예시를 보여드리고 어떤 때 쓰면 좋을지 간단하게 적어보겠습니다.

 

예시 데이터는 아래와 같습니다.

# 예시 데이터
import pandas as pd

df = pd.DataFrame({
    "category": ["Electronics", "Electronics", "Clothing", "Clothing", "Electronics"],
    "client": ["ClientA", "ClientA", "ClientB", "ClientB", "ClientC"],
    "region": ["Seoul", "Busan", "Seoul", "Busan", "Seoul"],
    "transaction": ["Sale", "Sale", "Return", "Sale", "Return"],
    "amount": [1000, 1500, 500, 700, 1200]
})

print(df)

 


(사용예시) grouped 객체를 for문에 사용하기

grouped객체는 2가지로 나눌 수 있었습니다. 아래 코드의 결과는 어떻게 될까요?

grouped = df.groupby(["category", "client"])

for group_values, group_df in grouped:
    print("group_values:", group_values)
    print(group_df, "\n")

 

모든 group by 경우의 수에 대해 데이터프레임을 나눌 수 있게 됩니다. 각각의 제품 카테고리와 클라이언트에 대한 데이터프레임을 산출할 수 있습니다. 결과를 보면 (의류,clientB), (전자기기,clientA), (전자기기, ClientB)로 필터링 된 데이터프레임을 뽑을 수 있는 것을 볼 수 있습니다.

 

<Output>

(1) group_values: ('Clothing', 'ClientB')

group_df : 

category client region transaction amount
Clothing ClientB Seoul Return 500
Clothing ClientB Busan Sale 700

 

(2) group_values: ('Electronics', 'ClientA')

group_df : 

category client region transaction amount
Electronics ClientA  Seoul  Sale  1000
Electronics ClientA  Busan Sale 1500

 

(3) group_values: ('Electronics', 'ClientC')

group_df : 

category client region transaction amount
Electronics  ClientC Seoul  Return 1200

 

 

느낀점

아마 제가 코드를 작성했다면 아래처럼 작성하지 않았을까 싶습니다. 일일이 group by 케이스인 행을 찾는 로직이라 코드 작동시간이 훨씬 길어졌을 것 같습니다. 코드 자체도 grouped 객체를 사용한 for문이 훨씬 깔끔한 것 같네요.

# 모든 행에 대해 필터링
unique_groups = df[group_keys].drop_duplicates()

for _, row in unique_groups.iterrows():
    cond = True
    for col in group_keys:
        cond &= (df[col] == row[col])
    
    group_df = df[cond]

 

 

이번 포스팅은 간단하게 마무리하겠습니다. 더 쓰면 너무 길어질 거 같아 기회가 된다면 다음 포스팅에서 더 작성해보도록 하겠습니다. 감사합니다 :)

 

 

'데이터분석 > 데이터 전처리' 카테고리의 다른 글

[pandas] 한달 전 월말 날짜 구하기  (0) 2023.03.17
[pandas] if 문으로 빈 데이터프레임 거르기  (0) 2023.03.16
[pandas] 데이터프레임 날짜 인덱스 늘리기(reindex)  (0) 2023.03.16
[Pandas] 데이터 음수값 없애기  (0) 2023.03.14
'데이터분석/데이터 전처리' 카테고리의 다른 글
  • [pandas] 한달 전 월말 날짜 구하기
  • [pandas] if 문으로 빈 데이터프레임 거르기
  • [pandas] 데이터프레임 날짜 인덱스 늘리기(reindex)
  • [Pandas] 데이터 음수값 없애기
데이터먼지
데이터먼지
데이터분석 및 AI Agent 개발하고 있습니다 :)
  • 데이터먼지
    먼지's Data Analysis
    데이터먼지
  • 전체
    오늘
    어제
    • 분류 전체보기 (45) N
      • AI agent (3)
      • 데이터분석 (24) N
        • 데이터분석 (4)
        • 데이터 전처리 (10) N
        • 데이터시각화 (3)
        • 시계열분석 (6)
        • 환경세팅 (1)
      • SQL (6)
      • 개발&분석 경험 (2)
      • 알고리즘 (3)
      • OS (1)
      • 수학 (4)
        • 선형대수 (2)
        • 확률&통계 (2)
      • 맛집 (2)
        • 이수&사당 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    크롤링자동화
    시간형식
    시간형식변환
    시계열
    시계열데이터셋
    seaborn # kdeplot # 데이터분석
    시계열모듈
    시계열 #reindex #인덱스 확장 #datetime index #index extention # 데이터전처리
    빈 데이터프레임 #pandas #데이터전처리
    응용이 보이는 선형대수
    파이프라인전처리
    Python
    리눅스개념
    stl
    플로틀리
    오제이튜브
    시계열분해
    이수역 양식집
    짧은 시계열 # 금융시계열
    adf_test
    np.split
    시계열시각화
    데이터분석
    timeseries decomposition
    pandas # 월말 날짜 # 마지막 주 # 날짜계산 # 시계열 # 마지막 주 금요일
    음수값 #전처리 #선형보간 #pandas #데이터 #데이터분석
    확률
    loess
    pandas
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데이터먼지
[pandas] grouped 객체 for문에 사용하기
상단으로

티스토리툴바