파이썬(Python)&판다스(Pandas)&Polars

[Pandas] explode 단일 행을 여러 행으로 나누기

송채채 2023. 4. 28. 14:05

❗❗chatGPT를 사용하여 예시 데이터 프레임과 아래와 같이 프롬프트를 작성하여 얻은 코드입니다.❗❗

"'다운로드명'은 중복으로 생성하고 '시도명'에 있는 리스트값을 한행씩 쪼개는 코드를 작성해줘"

 

아래와 같이 explode 함수를 사용하여 시도 컬럼을 리스트에서 한 행씩 쪼개서 중복된 다른 컬럼의 값과 함께 표현할 수 있습니다.

import pandas as pd

# 데이터프레임 생성
data = {'다운로드파일명': ['부산1_부산광역시_건축사사무소 현황_20220719.CSV', '부산2_부산광역시_도시공간정보시스템_도로안내시설_20210720.CSV', '부산4_부산광역시_도시공간정보시스템_지하시설_20220711.CSV', '부산6_부산광역시_부산도시공간정보시스템_도로상하수도기반시설물_업체정보_2022071...', '부산8_부산광역시_도시공간정보시스템 _도로(건축물) 정보_20220711.CSV'],
        '시도': [['부산광역시'], None, None, ['세종특별자치시', '서울특별시', '인천광역시', '전라남도', '경상북도', '대구광역시', '경기도'], ['부산광역시']],
        '시군구': [['강서구', '수영구', '사상구', '영도구', '북구', '부산진구', '중구', '해운대구', '사하구', ...], ['동구'], ['동구'], ['강서구', '용인시 처인구', '용인시', '성남시 중원구', '사하구', '고양시 일산동구', '성북...'], ['강서구', '수영구', '사상구', '영도구', '북구', '부산진구', '중구', '해운대구', '사하구', ...]]}

df = pd.DataFrame(data)

# '시도' 컬럼을 한 행씩 쪼개서 데이터프레임을 생성
df_expanded = df.explode('시도').reset_index(drop=True)

# '다운로드파일명' 컬럼을 중복으로 생성
df_expanded = df_expanded.reindex(df_expanded.index.repeat(df_expanded['시도'].str.len()))

# 결과 확인
print(df_expanded)

 

반대로 여러행으로 구성된 데이터 프레임을 단일 행으로 합치고 싶을 땐 groupby와 agg을 사용합니다.

[Pandas] groupby, agg 여러 행을 단일 행의 리스트로 넣기

 

[Pandas] groupby, agg 여러 행을 단일 행의 리스트로 넣기

pandas의 explode 함수의 반대 기능을 하는 코드를 소개합니다. chatGPT의 도움을 받아 작성된 코드입니다. 문자열을 단일 행에 리스트로 합치는 방법은 다음과 같이 groupby와 agg를 사용하여 구현할 수

chaeeunsong.tistory.com

 

반응형