AI 머신러닝 딥러닝/파이썬 머신러닝 입문 공부일지

파이썬 머신러닝 입문 공부일지 6. 판다스 DataFrame 정렬, Aggregation, GroupBy

Tomitom 2023. 1. 3. 16:36
반응형

 

 

데이터 프레임과 시리즈의 정렬 sort_values()

 

데이터 프레임과 시리즈의 정렬을 위해서는 sort_values() 메소드를 이용합니다. 

 

기본 형식은 다음과 같습니다. 

 

df.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

 

  • by : 정렬의 기준이 될 레이블 입니다. 
  • axis : axis=0 은 인덱스, axis=1은 컬럼을 의미하며, 0 이면 행 1이면 열을 기준으로 정렬합니다. 
  • inplace : 원본을 대체할지 여부입니다. True 일 경우 원본을 대체합니다. 
  • kind :  알고리즘 모드이며 quicksort, mergesort, heapsort, stable이 있는데, 속도와 효율성의 차이를 갖습니다. 기본적으로 quicksort 이 디폴트이며 여기서는 깊게 다루지는 않겠습니다. 
  • na_position : Na 값의 위치입니다. na_position='last' 는 정렬시 맨 뒤, first 의 경우 맨 앞에 위치하며, 여기에서는 깊게 다루지는 않겠습니다. 
  •  ignore_index : 인덱스의 무시 여부입니다. True 의 경우 인덱스의 순서와 상관없이 0, 1, 2, ... 로 정해집니다. 
  • key : 이 인수를 통해 정렬방식으로 함수를 사용할 수 있습니다. 즉 lamba의 사용이 가능합니다. 
  •  ascending : True 의 경우 오름차순, False 의 경우 내림차순으로 정렬하며 디폴트값은 오름차순입니다.

 

주요 파라미터는 by, ascending, inplace 입니다.

 

앞서 계속 활용했던 타이타닉 탑승객 명단을 정렬해보겠습니다. 

탑승객 명단 중 Name 이름을 기준으로 정렬해봅니다. 

by= 컬럼명 을 기재하여 Name 을 기준으로 오름차순 정렬을 반환받을 수 있습니다. 

titanic_sorted = titanic_df.sort_values(by=['Name'])
titanic_sorted.head(3)

 

 

 

여러 개의 칼럼으로 정렬하기 위해서는 by = 리스트 형식으로 정렬하려는 칼럼 을 입력하면 됩니다.

ascending 을 False 값으로 주어 내림차순으로 정렬을 반환합니다. 

 

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

 

inplace 는 앞서  사용했던 바와 같이 True 로 설정하면 호출한 데이터 프레임의 정렬 결과를 그대로 적용하며, 기본은 inplace = False 입니다. 

 

 

Aggregation 함수

 

데이터 프레임에서 min() , max(), sum(), count() 와 같은 Aggregation (집계, 집합) 함수를 사용할 수 있습니다. 

숨겨진 행과 오류 값을 무시할 수 있는 옵션을 통해 목록이나 데이터베이스에 여러가지 집계 함수를 적용시킵니다. 

 

Aggregation 함수를 호출할 경우 모든 칼럼에 해당 Aggregation을 적용합니다. 

가령 타이타닉 탑승자 명단 데이터 프레임에 count() 를 적용하면 모든 칼럼에 각 count() 에 대한 결과를 반환합니다. 

단, Null 값은 반영하지 않기 때문에 해당 Null 값은 제외한 값이 카운트 됩니다. 

 

 

 

 

만약 특정 칼럼에만 집계함수를 저용하고 싶다면 DataFrame 에 대상 칼럼들만 추출해서 적용하면 됩니다. 

 

 

groupby() 적용

groupby() 기능은 데이터를 그룹별로 분할해서 독립된 그룹에 대해 별도의 데이터 처리를 하거나 그룹별 통계량을 확인할 때 유용하게 쓰이는 함수 입니다. 

 

 

www.w3resource.com

 

  • split(나누기) : groupby() 에서 정의한 컬럼 조건에 따라 독립된 그룹으로 나눕니다. 
  • apply(적용하기) : 나뉘어진 독립 그룹별 함수들을 적용합니다. (예시는 sum) 
  • combine(결합하기) : 각각의 독립 그룹별로 함수가 적용된 결과를 종합하여 하나의 테이블로 합칩니다. 

배움 출처 : https://teddylee777.github.io/pandas/pandas-groupby 

 

판다스(Pandas) .groupby()로 할 수 있는 거의 모든 것! (통계량, 전처리)

판다스(Pandas) .groupby()로 할 수 있는 거의 모든 것! (통계량, 전처리)에 대해 알아보겠습니다.

teddylee777.github.io

 

가령 groupby(by='Pclass') 를 호출하면 Pclass 칼럼을 기준으로 그룹화된 객체를 반환합니다. 

즉, Pclass 칼럼을 기준으로 나머지 모든 칼럼들에게 aggregation 함수를 적용할 수 있습니다. 

Pclass 를 기준으로 모든 값들을 카운트(값의 갯수를 셈) 하겠습니다. 

 

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

 

 

그룹화 된 객체는 같은 데이터 프레임이므로 [ ]  연산자로 셀렉트가 가능합니다. 

즉, 전체 목록이 아닌 특정 칼럼만 필터링 해서 조회하고 싶다면 해당 객체에 [[ '칼럼명', '칼럼명' ]] 으로 필터링 해서 수행할 수 있습니다. 

 

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

 

 

여기까지 정렬과 집계, 그룹화 방법에 대해서 알아보았습니다. 

다음에는 결손 데이터를 처리하는 것을 확인해볼게요. 

 

 

 

 

반응형