Py) 기초 - Pandas(원소/조합 세기)

Py) 기초 - Pandas(원소/조합 세기)

파이썬 기반 데이터분석을 위하여 Pandas 객체의 고유한 원소 또는 행을 세는 것을 알아보고자 한다.


개요

고객 데이터에서 몇 명의 고객의 데이터가 있는지, 부서별 월별 실적 데이터에서 몇 개 부서의 데이터가 있는지 알아보려면 고객 또는 부서 관련

데이터 준비

다음과 같이 데이터를 준비한다.

1
2
3
4
5
df = pd.DataFrame({"cat": ["food", "food", "snack", "snack", "snack"],
"type": ["A", "A", "B", "C", "B"],
"price": [100, 100, 300, 200, 500],
"star": [3.1, 3.5, 4.3, 4, 3.9]})
df
cat type price star
0 food A 100 3.1
1 food A 100 3.5
2 snack B 300 4.3
3 snack C 200 4.0
4 snack B 500 3.9

시리즈(Series)

데이터프레임의 특정 변수를 뽑아내면 시리즈 객체가 되는데 해당 객체를 기준으로 다루는 시나리오를 알아보자.

집합 함수인 set()의 특성을 활용하여 원소 개수를 셀 수 있다.

1
2
len(set(df["cat"]))
## 2

시리즈 객체의 중복제거 메서드인 .unique()를 사용할 수 있다.

1
2
len(df["cat"].unique())
## 2

시리즈 객체의 고유한 원소 개수를 세는 메서드인 .nunique()를 사용할 수 있다.

1
2
df["cat"].nunique()
## 2

시리즈 객체의 고유한 원소별 개수를 세거나 비율을 계산하는 메서드인 .value_counts()를 사용할 수 있다.

1
2
3
4
df["cat"].value_counts()
## snack 3
## food 2
## Name: cat, dtype: int64

.value_counts()의 경우 “normalize” 인자에 True를 할당하면 고유한 원소가 시리즈 객체에서 차지하는 비율을 계산할 수 있다.

1
2
3
4
df["cat"].value_counts(normalize = True)
## snack 0.6
## food 0.4
## Name: cat, dtype: float64

데이터프레임(DataFrame)

데이터프레임 객체의 경우 .drop_duplicates() 메서드로 중복된 행을 제거할 수 있다.

1
df[["cat", "type"]].drop_duplicates()
cat type
0 food A
2 snack B
3 snack C
1
2
3
4
5
len(df[["cat", "type"]].drop_duplicates())
## 3

df[["cat", "type"]].drop_duplicates().shape[0]
## 3

.groupby() 메서드를 사용해서도 확인할 수 있다. 기준변수인 “cat”와 “type”에 대한 고유한 조합의 행과 그 행이 몇 개인지 확인하려면 기준변수가 아닌 다른 변수를 대상변수로 지정하고 뒤에 .count() 메서드를 사용하면 된다. 여기서는 “price” 변수를 대상변수로 사용하였다.
.groupby()의 용법과 관련해서는 Pandas(GroupBy) 게시물에서 상세하게 다룬다.

1
df.groupby(["cat", "type"])["price"].count().reset_index()
cat type price
0 food A 2
1 snack B 2
2 snack C 1

상기의 코드는 .drop_duplicates() 결과보다 더 많은 정보를 보고자 할 때 사용할 수 있겠다. 그리고 Pandascrosstab() 함수를 사용해서도 비슷한 결과를 도출할 수 있으나 결과 객체를 다루기가 까다로워 별도로 소개하진 않았다.


<파이썬 데이터분석 기초 시리즈>
01 - 원소
02 - 연산자
03 - 함수
04 - 객체(리스트)
05 - 객체(튜플)
06 - 객체(딕셔너리)
07 - 객체(세트)
08 - 객체(기타)
09 - 제어문(if)
10 - 제어문(for)
11 - 기본함수
12 - 라이브러리
13 - 경로
14 - NumPy
15 - Pandas
16 - Pandas(Series)
17 - Pandas(DataFrame)
18 - Pandas(객체 탐색)
19 - Pandas(원소/조합 세기)
20 - Pandas(파일 읽어오기)
21 - Pandas(파일 쓰기)
22 - Pandas(필터링)
23 - Pandas(수치연산)
24 - Pandas(신규 변수 생성)
25 - Pandas(시간 데이터)
26 - Pandas(문자 데이터)
27 - Pandas(결측값 처리)
28 - Pandas(정렬)
29 - Pandas(GroupBy)
30 - Pandas(Apply)
31 - Pandas(Crosstab)
32 - Pandas(Melt)
33 - Pandas(Pivoting)
34 - Pandas(Merge)
35 - Pandas(그래프)

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×