데이터 분석/python
collections.Counter
fullfish
2025. 10. 13. 10:33
기본 사용법
from collections import Counter
cnt = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
print(cnt)
# Counter({'a': 3, 'b': 2, 'c': 1})
내부적으로 딕셔너리처럼 작동 (key=요소, value=빈도)
cnt['a'] → 3
존재하지 않는 키는 자동으로 0 반환 (KeyError 안 남)
문자열
Counter("banana")
# Counter({'a': 3, 'n': 2, 'b': 1})
most_common() 많이 등장한 순으로 정렬된 리스트 반환
cnt = Counter("banana")
print(cnt.most_common()) # [('a', 3), ('n', 2), ('b', 1)]
print(cnt.most_common(2)) # [('a', 3), ('n', 2)] # 최빈값 3개
update(), subtract()
a = Counter({'a': 3, 'b': 1})
b = Counter({'a': 1, 'b': 2})
a.update(b)
print(a) # Counter({'a': 4, 'b': 3}) ← 더하기
a.subtract(b)
print(a) # Counter({'a': 3, 'b': 1}) ← 빼기 # 위에서 b더해지고 다시 뺴져서 똑같음
# 뺄 때 음수도 나옴
수학 연산
a = Counter(A=4, B=2, C=0)
b = Counter(A=1, B=2, C=3)
print(a + b) # Counter({'A': 5, 'B': 4, 'C': 3})
print(a - b) # Counter({'A': 3}) ← 음수나 0은 자동 제거
print(a & b) # Counter({'B': 2}) ← 교집합(최솟값)
print(a | b) # Counter({'A': 4, 'B': 2, 'C': 3}) ← 합집합(최댓값)
dict처럼 가능
cnt = Counter("apple")
print(cnt.keys()) # dict_keys(['a', 'p', 'l', 'e'])
print(cnt.values()) # dict_values([1, 2, 1, 1])
print(cnt.items()) # dict_items([('a',1), ('p',2), ('l',1), ('e',1)])
예시: 제일 많은 문자
s = "mississippi"
cnt = Counter(s)
max_char = max(cnt, key=cnt.get)
print(max_char) # 'i'
