Python/Pandas

[kaggle learn pandas] Grouping and Sorting

notty 2024. 5. 30. 15:06
728x90

사용한 데이터 형태

 

groupby

  • groupby()로 선택한 컬럼에 대한 그룹화를 진행한다
  • 그룹화는 해당 열의 데이터들의 unique한 값을 기준으로 묶는다
  • 해당 그룹에 대해서 count(), mean(), min() 등등을 수행할 수 있다. 
# df의 col_name1로 그룹화
df.groupby('col_name1')

# df의 col_name1로 그룹화 한 후 'col_name2'열의 평균을 계산
df.groupby('col_name1').col_name2.mean()

 

1) cylinders열의 unique한 값들을 확인한다

 

2) cylinders열을 기준으로 groupby를 진행하고 cylinders의 각 unique한 값에 대하여 속하는 mpg열의 값들의 mean을 구한다

dataframe에 apply 함수를 적용하여 데이터를 변화시킬 수 있다

df.groupby('col_name1').apply(lambda df: ~~~)

 

cylinder로 그룹화한 뒤 각 그룹에서 name열의 첫번째 값을 가져온다

** 이 부분에서 kaggle learn 작성자는 apply 속의 함수 중 df.title.iloc[0]으로 작성하였지만 다른 데이터셋으로 로컬에서 실행하면 " AttributeError: 'int' object has no attribute 'iloc'" 이런 오류가 발생한다. 그래서 df['name'].iloc()으로 적용했는데 값이 잘 도출되었다. 왜그런지는 아직 찾는중..

 

여러개의 열에 대해서도 groupby적용이 가능하다

df.groupby(['col1','col2'])

 

각 그룹의 mpg열에 대해서 함수를 적용

  • .agg()를 사용하여 여러개의 함수를 사용할 수 있다. 
  • 리스트에 각 함수 계산 값을 입력한
  • .agg()에는 사용자 정의 함수도 사용이 가능하다

 

multi-index -> reset_index()

  • 여러개의 열을 기준으로 그룹화를 하면 <class 'pandas.core.indexes.multi.MultiIndex'> type으로 변환된다
  • 이런 index를 다시 초기화 하기 위해서 .reset_index()를 사용한다

multi-index형태

 

reset_index() 적용 후

 

Sorting

  • 그룹화를 한 후에 각 그룹에 들어간 데이터의 순서는 값에 대해 정렬되어있는 것이 아니라 기존 인덱스 순서대로 정렬되어있다
  • 값을 기준으로 정렬을 하기 위해서는 sort_values() method를 사용한다
# col_name열의 값들에 대해서 정렬한다
df.sort_values(by = 'col_name')

# ascending=False : 내림차순, ascending=True : 오름차순 (default)
df.sort_values(by = 'col_name', ascending=False)

 

Auto 데이터 프레임의 'year'열에 대해서 오름차순 정렬

  • year이 작은 순으로 정렬되었고 가장 왼쪽의 인덱스 열은 그 순서가 섞여 있음

 

Auto 데이터 프레임에서 'year'열에 대해 내림차순 정렬 (ascending = False)

  • year이 큰 순으로 정렬되었고 가장 왼쪽 인덱스 열이 섞여있음

 

sort_index() method를 사용하여 다시 원래상태(인덱스 정렬)로 돌리기

# col_name열에 대해서 내림차순 정렬 -> sort_index() -> 인덱스 기준으로 정렬(원상태)
df.sort_values(by = 'col_name', ascending=False).sort_index()

728x90
반응형