groupby를 이용하여 여러 행을 하나의 행으로 요약 (multiple rows convert to single row)

2021. 10. 2. 10:51코딩/Python

반응형

안녕하세요 여러분, 코봉이 입니다!

 

오늘은 pandas의 groupby 를 이용한 그룹핑 방법 중 하나를 알아볼 텐데요.

 

데이터를 정리하다 보면 같은 값을 가지는 여러 행을 merge 하여 한 행으로 정리해야될 일이 있으실 겁니다.

 

그럴 때, 꼭 유용하게 쓰셨으면 하여 작성합니다!

 

Korea & seoul 에 사는 친구들이 5명인데, 굳이 여러 행으로 볼 필요 있나요? 한 줄로 합쳐야 용량 관점에서 더 이점이 있을 때도 있겠죠?

 

import pandas as pd
path = 'C:/Users/dataset/'
data = pd.read_csv(path + 'data3.csv') ## dataset read ##

print(data)

  country          city     name
0   Korea         seoul    brian
1   Korea         seoul     json
2   Korea         seoul    baker
3   Korea         seoul    henna
4   Korea         seoul    harry
5   U.S.A  sanfransisco      zoe
6   U.S.A  sanfransisco     jack
7   U.S.A  sanfransisco  rihanna

 

먼저 pandas를 이용하여 데이터셋을 읽어옵니다.

 

오늘의 핵심!

 

groupby를 이용하여 어디까지 그룹핑을 해줄 건지 정해준 다음, 설정된 그룹 내에서 join을 활용하여 하나로 묶어주게 됩니다.

 

group = data.groupby(['country', 'city'])['name'].apply(', '.join)
## country와 city까지만 그룹핑을하고, 그에 해당하는 name 값을 가져오겠다 ##

print(group)

country  city        
Korea    seoul           brian, json, baker, henna, harry
U.S.A    sanfransisco                  zoe, jack, rihanna
Name: name, dtype: object

 

짜잔~ 원하는 모양이 나왔죠~?

 

해당 결과를 dataframe으로 활용이 필요할 경우, 마지막에 .reset_index()를 추가하면 dataframe 형식으로 활용할 수 있습니다!

 

reset_index()에 대한 내용은 아래 글에서 좀 더 상세히 확인하시면 되겠습니다.

2021.10.02 - [python] - pandas groupby output convert to DataFrame

 

 

reset_index()를 추가하면 결과는 이렇게 아름답게 나오게 되고, 해당 결과는 DataFrame 형식으로 이후 유용하게 활용할 수 있는 변수가 됩니다.

 

 

group = data.groupby(['country', 'city'])['name'].apply(', '.join).reset_index()
## group 결과를 dataframe으로 계속 활용해야할 경우 ##

print(group)

  country          city                              name
0   Korea         seoul  brian, json, baker, henna, harry
1   U.S.A  sanfransisco                zoe, jack, rihanna

이상, 많은 도움되셨으면 좋겠습니다^^

반응형