DataFrame에서 정렬과 집계 하기
DataFrame.sort_index(axis, ascending=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()은 문자열 컬럼에 사용할 수 없다.
공통 매개변수
skipna
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
DataFrame, Series의 메소드로 집계결과를 다양한 형태로 묶어서 볼 때 사용한다.
매개변수
func
axis
*args, **kwargs
# 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
구문
DF.groupby('그룹으로 묶을 기준 컬럼')DataFrameGroupby객체['집계할 컬럼'].집계함수()집계함수