Pandas에서 특정 열들을 그룹화하고 각 조합이 나타난 횟수를 계산하려면 DataFrame.groupby() 메서드와 size() 함수를 함께 사용합니다. groupby() 메서드는 DataFrame을 지정한 기준에 따라 여러 그룹으로 나누어 주며, size()는 각 그룹에 속한 행의 개수를 반환합니다.
1. 라이브러리 임포트
먼저 pandas 라이브러리를 pd라는 별칭으로 가져옵니다.
import pandas as pd
2. 데이터 준비
딕셔너리 형태의 리스트 데이터를 초기화합니다. 이 예제에서는 차량(Car), 판매 지역(Place), 판매량(Sold) 세 개의 열을 사용합니다.
# 데이터 초기화
mylist = {'Car': ['BMW', 'Mercedes', 'Lamborgini', 'Audi', 'Mercedes', 'Porsche', 'RollsRoyce', 'BMW'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Bangalore', 'Hyderabad', 'Mumbai', 'Mumbai', 'Delhi'],
'Sold': [95, 80, 80, 75, 90, 90, 95, 50]}
3. DataFrame 생성
준비한 데이터를 바탕으로 DataFrame을 생성합니다.
# DataFrame 생성
dataFrame = pd.DataFrame(mylist, columns=['Car', 'Place', 'Sold'])
4. groupby()와 size()로 발생 횟수 계산
이제 groupby()에 그룹화할 열 목록을 전달하고, size()를 호출하여 각 조합의 발생 횟수를 구합니다.
print("Counting the occurrences...")
res = dataFrame.groupby(['Car', 'Place']).size()전체 예제 코드
각 조합의 발생 횟수를 계산하는 전체 코드는 다음과 같습니다.
# 라이브러리 임포트
import pandas as pd
# 데이터 초기화
mylist = {'Car': ['BMW', 'Mercedes', 'Lamborgini', 'Audi', 'Mercedes', 'Porsche', 'RollsRoyce', 'BMW'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Bangalore', 'Hyderabad', 'Mumbai', 'Mumbai', 'Delhi'],
'Sold': [95, 80, 80, 75, 90, 90, 95, 50]}
# DataFrame 생성
dataFrame = pd.DataFrame(mylist, columns=['Car', 'Place', 'Sold'])
print(dataFrame)
print("Counting the occurrences...")
res = dataFrame.groupby(['Car', 'Place']).size()
# 발생 횟수 출력
print(res)
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Car Place Sold
0 BMW Delhi 95
1 Mercedes Hyderabad 80
2 Lamborgini Chandigarh 80
3 Audi Bangalore 75
4 Mercedes Hyderabad 90
5 Porsche Mumbai 90
6 RollsRoyce Mumbai 95
7 BMW Delhi 50
Counting the occurrences...
Car Place
Audi Bangalore 1
BMW Delhi 2
Lamborgini Chandigarh 1
Mercedes Hyderabad 2
Porsche Mumbai 1
RollsRoyce Mumbai 1
dtype: int64
결과 해석 및 추가 팁
출력 결과를 보면 BMW-Delhi 조합과 Mercedes-Hyderabad 조합은 각각 2번 나타났고, 나머지 조합들은 1번씩 나타난 것을 확인할 수 있습니다.
참고로 size()는 NaN 값을 포함하여 그룹의 크기를 계산하지만, count()는 NaN을 제외한 값만 세어 줍니다. 또한 결과를 일반적인 DataFrame 형태로 변환하고 싶다면 reset_index(name='Count')를 추가하면 됩니다.
res = dataFrame.groupby(['Car', 'Place']).size().reset_index(name='Count')
이렇게 하면 멀티인덱스 Series가 아닌, 열 이름이 명확하게 지정된 DataFrame으로 결과를 얻을 수 있어 후속 분석이나 시각화 작업에 더욱 편리합니다.