말랑말랑제리스타일

[Pandas]판다스 group by 정리 본문

프로그래밍/파이썬

[Pandas]판다스 group by 정리

제리제리 2022. 1. 19. 16:40

오라클이나 MS-SQL 등 RDB를 사용해보신 분들은 모두 익히 잘 알고있을만한 기능, group by 절은 판다스에도 존재합니다. 이름 역시 group by와 동일하게 DataFrame.groupby(조건) 으로 사용 가능하죠.

그럼 지금부터 실제 코드와 함께 살펴봅시다.

1. 싱글 group by 사용

test_df.groupby('Pclass').Pclass.count()
test_df.groupby('Pclass').Age.min()

이와 같이 "DataFrame.groupby(그루핑할 필드).출력할필드.그룹함수" 형태로 판다스의 group by 절을 사용할 수 있습니다.

판다스에서 데이터 매핑을 하기 위한 apply와 데이터 조회를 하기 위한 loc 또는 iloc를 이용해서 group by 절을 아래와 같이 사용하는 것도 가능합니다.

test_df.groupby('Pclass').apply(lambda p: p.Age.iloc[0])

2. 다중 필드 group by 사용

test_df.groupby(['SibSp','Parch']).apply(lambda p: p.loc[p.PassengerId.idxmax()])

이처럼 판다스의 group by 절의 매개변수를 리스트 형태로 전달해주면 다중 필드로 group by 사용이 가능합니다.

참고로 위 소스코드에서는 최종적으로 실행한 함수가 apply이고 p에 row를 반환하는 loc 함수를 사용했기 때문에 결과로 DataFrame을 반환하게 됩니다.

3. agg

여기서 유용하게 사용 가능한 판다스의 기능이 agg()입니다. agg는 aggregate, 집계의 약어로 group by 절에서 통계 결과를 나타내기에 굉장히 좋은 기능입니다.

test_df.groupby(['SibSp','Parch']).Age.agg([len,min,max])

작성한 파이썬 소스와 같이 "group by(그룹조건).집계대상필드.agg(집계할 항목 리스트)" 로 표현이 가능하며 작성한 소스코드에서는 len(해당되는 데이터 개수), min(최소값), max(최대값) 을 판다스의 DataFrame 형태로 반환합니다.

마지막으로 두개의 필드로 group by할 경우 index가 두개로 생성됩니다.

만약 이런 경우 index를 초기화하고싶다면 아래 소스코드를 사용할 수 있습니다.

group_passenger.reset_index()

 

반응형
Comments