[Pandas] unique / nunique
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| s | unique | nunique |
|---|---|---|
| A | A | (3 또는 4) |
| B | B | |
| A | ||
| C | C | |
| B | ||
| A | ||
| NaN | NaN |
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: int64drop_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…
💬 댓글