.value_counts()와 .reset_index()의 동작
1. .value_counts()
의 기본 동작
1) 개념과 동작 원리
value_counts()
는 Series에서 사용되며, 각 고유 값의 빈도수를 계산하여 내림차순으로 정렬된 Series를 반환합니다.- 인덱스는 고유 값, 값은 해당 고유 값의 빈도수로 구성됩니다.
예제 코드
import pandas as pd
data = pd.Series(['A', 'B', 'A', 'C', 'B', 'A'])
result = data.value_counts()
print(result)
실행 결과
A 3
B 2
C 1
dtype: int64
A
,B
,C
: 데이터의 고유 값.3
,2
,1
: 각각의 빈도수.- 기본적으로 내림차순으로 정렬됩니다.
2. .reset_index()
의 동작
1) 개념과 동작 원리
reset_index()
는 Series를 데이터프레임으로 변환하며, 기존 인덱스를 새로운 열로 이동시킵니다.
예제 코드
result_df = result.reset_index()
print(result_df)
실행 결과
index count
0 A 3
1 B 2
2 C 1
- 기존 인덱스(
A
,B
,C
)가 새 열(index
)로 이동됩니다. - 기존 값(
3
,2
,1
)은 새로운 열(0
)로 변환됩니다.
(참고) count 컬럼명을 따로 지정하지 않았는데도 count로 출력되는 이유는 아래 항목에서
4. 컬럼명이 존재하는 경우와 없는 경우 -> 1) 컬럼명이 지정되지 않는 경우
를 참고
3. .value_counts().reset_index()
사용
1) 데이터프레임 형태로 변환
value_counts()
와reset_index()
를 결합하여 고유 값과 빈도수를 데이터프레임 형태로 변환합니다.
예제 코드
data = pd.Series(['A', 'B', 'A', 'C', 'B', 'A'])
result_df = data.value_counts().reset_index()
result_df.columns = ['value', 'count']
print(result_df)
실행 결과
value count
0 A 3
1 B 2
2 C 1
value
: 고유 값.count
: 각 고유 값의 빈도수.- 열 이름을
columns
로 재설정하여 더 직관적인 이름을 부여합니다.
4. 컬럼명이 존재하는 경우와 없는 경우
1) 컬럼명이 지정되지 않는 경우
- 기본적으로
index
와0
로 설정됩니다. value_counts()
로 생성된 Series의 값이 명확하게 빈도수를 의미하는 경우,reset_index()
는 두 번째 열의 이름을 자동으로count
로 설정합니다. 이를 통해 추가적인 열 이름 재설정 없이도 직관적인 데이터프레임을 얻을 수 있습니다.
예제 코드
series = pd.Series([3, 2, 1], index=['A', 'B', 'C'])
result_df = series.reset_index()
print(result_df)
실행 결과
index count
0 A 3
1 B 2
2 C 1
2) 컬럼명이 존재하는 경우
- 기존 Series 인덱스의 이름이 데이터프레임의 첫 번째 열 이름으로 설정됩니다.
예제 코드
series = pd.Series([3, 2, 1], index=['A', 'B', 'C'])
series.index.name = 'value'
result_df = series.reset_index()
print(result_df)
실행 결과
value count
0 A 3
1 B 2
2 C 1
5. 자동 정렬
1) 자동 정렬 동작 원리
value_counts()
는 기본적으로 빈도수에 따라 내림차순으로 정렬된 결과를 반환합니다.reset_index()
를 호출해도 정렬 상태는 유지됩니다.- 별도로 정렬 코드를 추가하지 않아도, 고유 값이 빈도수 기준으로 정렬된 결과를 얻을 수 있습니다.
6. 추가 정렬 옵션
1) 빈도수 오름차순 정렬
result_df = data.value_counts().reset_index()
result_df.columns = ['value', 'count']
result_df = result_df.sort_values(by='count', ascending=True)
print(result_df)
실행 결과
value count
0 C 1
1 B 2
2 A 3
2) 값 기준 정렬
result_df = data.value_counts().reset_index()
result_df.columns = ['value', 'count']
result_df = result_df.sort_values(by='value', ascending=True)
print(result_df)
실행 결과
value count
0 A 3
1 B 2
2 C 1