Python/Python Pandas
Python Pandas : nunique() (count distinct, 중복없는 값 세기, unique한 값의 개수 세기, pandas count distinct, DataFrame count distinct)
CosmosProject
2023. 10. 24. 23:23
728x90
반응형
nunique() method는 DataFrame이나 Series에 있는 값들 중 중복값을 제거한 unique한 값의 개수를 return합니다.
바로 예시를 봅시다.
import pandas as pd
df_test = pd.DataFrame(
{
'col1': [1, 1, 3, 3, 4, 4, 4],
'col2': [8, 8, 8, 8, 8, 9, 9],
}
)
print(df_test)
nunique_result = df_test.nunique()
print(nunique_result)
print(type(nunique_result))
-- Result
col1 col2
0 1 8
1 1 8
2 3 8
3 3 8
4 4 8
5 4 9
6 4 9
col1 3
col2 2
dtype: int64
<class 'pandas.core.series.Series'>
df_test라는 DataFrame을 만들었고 거기에 nunique를 적용해보았습니다.
col1 col2
0 1 8
1 1 8
2 3 8
3 3 8
4 4 8
5 4 9
6 4 9
col1 3
col2 2
결과부터 봐봅시다.
일단 nunique()를 DataFrame에 적용시키면 각 column에 존재하는 값들 중 unique한 값이 몇개인지 (= 몇 종류인지)를 return합니다.
col1의 값을 보면 1이 2개, 3이 2개, 4가 3개 있습니다.
뭐가 몇개있는지는 상관없이 중복제거를 하면 1, 3, 4 세 종류의 값이 col1에 존재합니다.
따라서 nunique()의 결과로 col1에는 3이 return되었습니다.
col2의 unique한 값은 8과 9 두 가지 이므로 col2에 대한 값은 2가 return되었습니다.
import pandas as pd
sr_test = pd.Series([1, 1, 3, 3, 4, 4, 4])
print(sr_test)
nunique_result = sr_test.nunique()
print(nunique_result)
print(type(nunique_result))
-- Result
0 1
1 1
2 3
3 3
4 4
5 4
6 4
dtype: int64
3
<class 'int'>
nunique()는 Series에도 적용할 수 있습니다.
마찬가지로 Series에 존재하는 값들의 unique한 개수를 세어줍니다.
sr_test에서 unique한 값은 1, 3, 4이므로 3이 return됩니다.
nunique()를 이용하면 마치 쿼리에서 count(distinct ~~)와 같은 기능을 사용할 수 있습니다.
import pandas as pd
df_test = pd.DataFrame(
{
'date': [
20230101, 20230101, 20230101, 20230101,
20230102, 20230102, 20230102,
20230103, 20230103,
],
'item': [
1, 1, 2, 2,
1, 1, 1,
5, 7,
],
}
)
print(df_test)
df_daily_item_count = df_test.groupby(by=['date']).aggregate(
{
'item': pd.Series.nunique
}
)
print(df_daily_item_count)
-- Result
date item
0 20230101 1
1 20230101 1
2 20230101 2
3 20230101 2
4 20230102 1
5 20230102 1
6 20230102 1
7 20230103 5
8 20230103 7
item
date
20230101 2
20230102 1
20230103 2
각 date에 대해 item의 종류와 개수가 다른데,
각 date에 존재하는 unique한 item의 개수를 위처럼 카운팅할 수 있습니다.
728x90
반응형