Pandas/DataFrame/정렬/집계 복습

김홍찬·2023년 1월 21일

학습 내용

DataFrame에서 정렬과 집계 하기

정렬

index이름, column 이름을 기준으로 정렬

DataFrame.sort_index(axis, ascending=True)

  • axis
    • index 이름 기준 정렬(행) : 'index' 또는 0 (기본값)
    • column 이름 기준 정렬(열) : 'columns' 또는 1
  • ascending
    • 정렬방식 지정
    • True: 오름차순 (기본값)
    • False: 내림차순
  • inplace
    • 원본에 적용 여부 지정
    • False: 변경한 복사본 반환 (기본값)
    • True : 원본을 변경
import pandas as pd
import numpy as np

np.random.seed(0)

# 0~9 사이의 난수로 5행 3열의 행렬 생성
data = np.random.randint(10, size=(5,3))

df = pd.DataFrame(data, columns=['a','b','c'], 
index=['가','나','다','라','마'])

df

    a   b   c
가	5	0	3
나	3	7	9
다	3	5	2
라	4	7	6
마	8	8	1
# ascending 내림차순 지정
# index 이름의 순서가 변경됨

df.sort_index(ascending=False)

	a	b	c
마	8	8	1
라	4	7	6
다	3	5	2
나	3	7	9
가	5	0	3
-----------------------------------
axis=1을 추가로 줘보자

# column 이름의 순서가 변경됨  
df.sort_index(axis=1,ascending=False)

	c	b	a
가	3	0	5
나	9	7	3
다	2	5	3
라	6	7	4
마	1	8	8

axis=0과 1의 차이를 알아두자.

특정 컬럼(열)의 값을 기준으로 정렬

DataFrame.sort_values(by, ascending, inplace)

  • by

    • 정렬 기준이 되는 컬럼이름을 문자열로 지정
    • 여러 컬럼에 대해 정렬할 경우 리스트에 담아 전달한다.
  • ascending

    • 여러 컬럼에 대해 정렬할 경우 정렬방식도 리스트에 담아 전달
  • 결측치는 방식과 상관없이 마지막에 나온다.

import pandas as pd
import numpy as np

np.random.seed(0)

# 0~9 사이의 난수로 4행 10열의 행렬 생성
data = np.random.randint(100, size=(4,10))

df = pd.DataFrame(data, columns=['a','b','c','d','e','1','2','3','4','5'], 
index=['가','나','다','라'])

df

	a	b	c	d	e	1	2	3	4	5
가	44	47	64	67	67	9	83	21	36	87
나	70	88	88	12	58	65	39	87	46	88
다	81	37	25	77	72	9	20	80	69	79
라	47	64	82	99	88	49	29	19	19	14
# a를 기준으로 값들이 오름차순 정렬이 됨
# 기본값이 'ascending=True'
df.sort_values('a')

	a	b	c	d	e	1	2	3	4	5
가	44	47	64	67	67	9	83	21	36	87
라	47	64	82	99	88	49	29	19	19	14
나	70	88	88	12	58	65	39	87	46	88
다	81	37	25	77	72	9	20	80	69	79
------------------------------------------
지정한 컬럼만 보고싶을 때

# a를 기준으로 오름차순 한 값들 중 a와 1컬럼만 보고싶다
df.sort_values('a')[['a','1']]

	a	1
가	44	9
라	47	49
나	70	65
다	81	9
------------------------------------------
boolean indexing을 사용하여 조건에 만족하는 값 확인

# a가 50 이상의 값이 있는 '나'와 '다' 행만 잘라서 보여준다. 
result = df[df['a']>50].sort_values('a')
result

	a	b	c	d	e	1	2	3	4	5
나	70	88	88	12	58	65	39	87	46	88
다	81	37	25	77	72	9	20	80	69	79

집계

기술통계 메소드를 이용한다.

주요 기술통계 메소드

함수설명
sum()합계
mean()평균
median()중위수
mode()최빈값
quantile()분위수
std()표준편차
var()분산
count()결측치를 제외한 원소 개수
min()최소값
max()최대값
idxmax()최대값 index
idxmin()최소값 index
unique()고유값
nunique()고유값의 개수

value_counts()는 Series에만 사용할 수 있다.

  • DataFrame에 기술 통계 메소드를 사용하면 컬럼별로 계산한다.

  • idxmax(), idxmin()은 문자열 컬럼에 사용할 수 없다.

    • numpy의 argmax(), argmin() 함수 사용해라.
  • 공통 매개변수

  • skipna

    • 결측치를 포함해서 계산할지 여부 설정
    • True: 결측치 제외하고 계산(기본값)
    • False: 결측치 포함하여 계산
      • 결측치가 하나라도 포함되어 있으면 결과는 결측치이다.
  • axis

  • 0 : 컬럼 방향으로 집계(위에서 아래로)

  • 1 : 인덱스 방향으로 집계(좌에서 우로)

df.max()

a    81
b    88
c    88
d    99
e    88
1    65
2    83
3    87
4    69
5    88
dtype: int32
--------------------------

df.mean()

a    60.50
b    59.00
c    64.75
d    63.75
e    71.25
1    33.00
2    42.75
3    51.75
4    42.50
5    67.00
dtype: float64

agg(func, axis=0, *args, **kwargs)

  • DataFrame, Series의 메소드로 집계결과를 다양한 형태로 묶어서 볼 때 사용한다.

  • 매개변수

  • func

    • 집계 함수 지정
      • 함수명/함수리스트 (문자열)
        • 판다스 제공 집계메소드들은 문자열로, 사용자정의 집계함수는 함수 객체로 전달
      • Dictionary : {'집계할컬럼' : 집계함수, ... }
        • 컬럼별로 다른 집계를 할 경우 사전을 사용
  • axis

    • DataFrame에 적용할 때 0 방향으로 계산할 지 1 방향으로 계산할지 설정
      • 0 또는 'index' (기본값): 컬럼 방향으로 집계
      • 1 또는 'columns': 행 방향으로 집계
  • *args, **kwargs

    • 함수에 전달할 매개변수.
    • 집계함수는 첫번째 매개변수로 Series를 받는다. 그 이외의 매개변수가 있는 경우.
# a의 최소값

df['a'].min()
44
---------------------------
# a의 최대값

df['a'].max()
81
---------------------------
# a의 최소값과 최대값
# 리스트로 묶어 한줄로 작성 가능

df['a'].agg(['min','max'])
min    44
max    81
Name: a, dtype: int64
---------------------------
# a와 1의 평균값

df[['a','1']].mean()
a    60.5
1    33.0
dtype: float64
---------------------------
# a와 1의 평균과 중위값
df[['a','1']].agg(['mean','median'])
	  	  a	      1
mean	60.5	33.0
median	58.5	29.0
# dict로 묶어 a에는 sum, 1에는 max,mean 함수 적용

df.agg({
	"a":"sum",
    "1":["max","mean"]
    })
   		  a	     1
sum	    242.0	NaN
max	    NaN	   65.0
mean	NaN	   33.0

Groupby

  • 특정 열을 기준으로 같은 값을 가지는 행끼리 묶어서 group화 한다.
  • ~~ 별 집계를 할 때 사용한다.
    • 성별, 직급별, 등급별 ...
      • Group으로 묶을 기준 열은 범주형타입(category)을 사용한다.

구문

  • DF.groupby('그룹으로 묶을 기준 컬럼')
    • DataFrameGroupby 객체를 반환한다.
    • DataFrameGroupby 객체는 어떤 행끼리 묶여있는지 정보를 가진다.
  • DataFrameGroupby객체['집계할 컬럼'].집계함수()
    • 이 객체의 집계함수를 사용하면 그룹별 집계를 할 수 있다.
  • 집계할 컬럼이 여러개인 경우 리스트로 묶어준다.

집계함수

  • 기술통계 함수들
  • agg()
    • 여러 다른 집계함수 호출시(여러 집계를 같이 볼경우)
    • 사용자정의 집계함수 호출시
    • 컬럼별로 다른 집계함수들을 호출할 경우
profile
바쁘다 바빠

0개의 댓글