세상을 바꾸는 데이터

[Pandas] 판다스 - DataFrame을 정렬, 집계, 그룹하는 방법 본문

ML/Pandas

[Pandas] 판다스 - DataFrame을 정렬, 집계, 그룹하는 방법

Industriousness 2022. 1. 25. 19:00

이번 포스트에서는 DataFrame을 정렬, 집계, group by하는 방법을 알아보자.

import numpy as np
import pandas as pd

titanic_df = pd.read_csv('titanic_train.csv')

 

캐글(kaggle)에서 사용되는 연습 데이터셋인 타이타닉(titanic) 데이터를 이용한다. 

타이타닉 데이터셋 다운 및 자세한 내용은 다음 포스트를 참고하면 된다.

https://data-flower.tistory.com/9?category=949030 

 

[Pandas] 판다스 - 파일을 DataFrame으로 불러오기, 기본 API

새로운 주피터 노트북을 생성하고 판다스 모듈을 임포트 한다. import pandas as pd 다음으로 데이터 파일을 판다스의 DataFrame으로 로딩할 것이다. 사용할 데이터 파일은 캐글의 대표 연습 파일인 타

data-flower.tistory.com

 


DataFrame, Series 정렬 - sort_values( )

  • DataFrame.sort_values( )

DataFrame과 Series의 정렬을 위해서는 sort_values( ) 메서드를 이용한다.

sort_values( )의 주요 입력 파라미터는 by, ascending, inplace이다.

1. by로 특정 칼럼을 입력하면 해당 칼럼으로 정렬을 수행한다.
2. ascending = True로 설정하면 오름차순 정렬, ascending = False로 설정하면 내림차순 정렬한다.
3. inplace = False로 설정하면 sort_values( )를 호출한 DataFrame은 그대로 유지하며 정렬된 DataFrame을 결과로 반환한다. 반대로 inplace = True로 설정하면 호출한 DataFrame의 정렬 결과를 그대로 적용한다.

 

  • 한 개의 컬럼으로 정렬

다음은 titanic_df를 Name 칼럼으로 오름차순 정렬해 반환한 것이다.

titanic_df_sort = titanic_df.sort_values(by=['Name'], ascending = True)
print(titanic_df_sort.head(3))

 

[Output]

Name 칼럼을 오름차순 정렬한 데이터셋

 

  • 여러 개의 칼럼으로 정렬

여러 개의 칼럼으로 정렬하려면 by에 리스트 형식으로 정렬하려는 칼럼을 입력하면 된다. Pclass와 Name을 내림차순으로 정렬한 결과를 반환해보자. 첫 번째로 'Pclass' 칼럼 내림차순 정렬하고, 그다음으로 'Name' 칼럼을 내림차순 정렬한다.

titanic_df.sort_values(by=['Pclass', 'Name'], ascending=False)

 

[Output]

'Pclass' 칼럼 내림차순 정렬 후 'Name' 칼럼 내림차순 정렬된 모습

 


집계 - Aggregation 함수

  • DataFrame.min( )
  • DataFrame.max( )
  • DataFrame.sum( )
  • DataFrame.count( )

모든 칼럼의 데이터 개수를 count로 구해보자. 여기서 NaN값은 count에서 제외된다.

titanic_df.count()

 

[Output]

NaN값은 count에서 제외

 

특정 칼럼들로 집계 함수를 수행해볼 것이다. 다음은 타이타닉 탑승자의 나이와 요금의 평균을 구한 것이다.

titanic_df[['Age', 'Fare']].mean(axis=0)

 

[Output]

     Age 평균: 29.6      Fare 평균: 32.2

 


groupby( )

  • DataFrame.groupby( )

Group By 하고자 하는 컬럼을 입력한다. 여러 개의 칼럼으로 Group by 하고자 하면 [ ] 내에 해당 칼럼명을 입력한다. DataFrame에 groupby( )를 호출하면 DataFrameGroupBy 객체를 반환하게 된다.

 

다음은 Pclass 칼럼을 기준으로 데이터 개수를 계산한 것이다.

titanic_groupby = titanic_df.groupby('Pclass').count()
titanic_groupby

 

[Output]

Pclass별 데이터 개수

 

Pclass를 기준으로 PassengerId와 Survived 칼럼만 데이터 개수를 세어보자.

titanic_groupby = titanic_df.groupby(by='Pclass')[['PassengerId', 'Survived']].count()
titanic_groupby

 

[Output]

Pclass별 특정칼럼의 개수

 

pandas는 여러 개의 집계(Aggregation) 함수를 적용할 수 있도록 agg( ) 함수를 제공하고 있다.

다음은 Pclass별 나이 칼럼 데이터를 추출하되, Pclass별 나이의 최댓값과 최솟값을 추출한 데이터이다.

titanic_df.groupby('Pclass')['Age'].agg([max, min])

 

[Output]

Pclass별 나이의 최댓값과 최솟값

 

 

판다스 데이터프레임 정렬하는 법

 

Reference


https://github.com/chulminkw/PerfectGuide

https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-%EC%99%84%EB%B2%BD%EA%B0%80%EC%9D%B4%EB%93%9C

 

 

728x90
반응형
Comments