본문으로 건너뛰기
김신건의 로그

[Pandas] unique / nunique

· 수정 · 📖 약 1분 · 231자/단어 #python #pandas #unique #distinct
Pandas unique, Pandas nunique, 고유값 pandas

정의

  • Series.unique() : 고유값을 등장 순서대로 numpy array 반환
  • Series.nunique() : 고유값의 개수 반환 (NaN 제외)
  • DataFrame.nunique() : 각 컬럼/행의 고유값 개수

SQL 의 SELECT DISTINCT / COUNT(DISTINCT) 와 동일.

사용

python
import pandas as pd
s = pd.Series(['A', 'B', 'A', 'C', 'B', 'A', None])
print('unique :', s.unique())
print('nunique:', s.nunique())
print('nunique (NaN 포함):', s.nunique(dropna=False))
결과
unique : ['A' 'B' 'C' None]
nunique: 3
nunique (NaN 포함): 4
suniquenunique
AA(3 또는 4)
BB
A
CC
B
A
NaNNaN

DataFrame.nunique

df.nunique()                # 각 컬럼의 고유값 개수
df.nunique(axis=1)          # 각 행의 고유값 개수
df.nunique(dropna=False)
python
import pandas as pd
df = pd.DataFrame({
  'city': ['Seoul','Busan','Seoul','Daegu'],
  'plan': ['pro','basic','pro','pro'],
  'age': [25, 30, 25, 28],
})
print(df.nunique())
결과
city    3
plan    2
age     3
dtype: int64

drop_duplicates 와의 관계

  • unique : Series 의 고유값 자체 (정렬되지 않은 원순서)
  • drop_duplicates : DataFrame/Series 의 행 단위 중복 제거
  • nunique : 고유값 개수만

자세한 행 단위 중복 제거는 Pandas drop_duplicates 참고.

정렬된 고유값

unique() 는 등장 순서. 정렬이 필요하면:

sorted(s.unique())              # Python sorted
np.sort(s.unique())             # numpy sort
s.unique()                       # 원순서 (등장 순)

활용

groupby + nunique (그룹별 고유값 개수)

df.groupby('city')['user_id'].nunique()      # 도시별 고유 사용자 수
df.groupby('city').nunique()                  # 도시별 모든 컬럼의 nunique

SQL: SELECT city, COUNT(DISTINCT user_id) FROM ... GROUP BY city

unique 의 결과는 numpy array

arr = s.unique()              # numpy ndarray (dtype 보존)
ser = pd.Series(s.unique())   # 다시 Series 로

함정

1. unique 의 정렬 안 됨

unique 가 정렬된 결과를 반환할 거라 가정하면 안 된다.

2. NaN 처리

s.unique()                    # NaN 도 포함 (numpy nan)
s.nunique()                   # NaN 제외 (default)
s.nunique(dropna=False)       # NaN 포함

3. 대용량 메모리

df.nunique()                  # 모든 컬럼에 대해 unique 계산, 메모리 多
df['col'].nunique()           # 한 컬럼만 (권장)

참고

이 글의 용어 (3개)
[Pandas] drop_duplicates / duplicatedpandas
정의 - : 각 행이 중복인지 boolean Series 반환 - : 중복 행 제거 후 DataFrame 반환 와는 다르다. 그건 Series 의 고유값 추출, 이건 행 단위 처…
[Pandas] Seriespandas
정의 는 1차원 레이블 배열. NumPy + 의 결합. 의 한 열이 곧 Series. 핵심 속성 | 속성 | 의미 | |:---|:---| | | numpy array | | |…
[Pandas] value_countspandas
정의 는 각 고유값의 등장 빈도 를 내림차순 Series 로 반환. SQL 의 . pandas 1.1+ 부터는 도 가능 (여러 컬럼 조합). 기본 <CodeWithOutput l…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기