Pandas DataFrame에서 두 개의 열을 기준으로 그룹화하고 개수를 세는 방법
- pandas
단계:
- 데이터 준비: 샘플 데이터 세트를 만들거나 CSV 파일로 가져옵니다.
- 데이터 프레임 만들기: pandas.DataFrame() 함수를 사용하여 데이터를 데이터 프레임으로 변환합니다.
- 그룹화:
groupby()
함수를 사용하여 두 개의 열을 기준으로 데이터 프레임을 그룹화합니다. - 개수 세기:
size()
함수를 사용하여 각 그룹의 개수를 계산합니다. - 결과 표시: 결과 데이터 프레임을 출력합니다.
예제:
import pandas as pd
# 샘플 데이터 세트 만들기
data = {'컬럼1': ['A', 'A', 'B', 'C', 'C', 'B'],
'컬럼2': [1, 2, 3, 1, 2, 3]}
df = pd.DataFrame(data)
# 두 개의 열을 기준으로 그룹화
grouped_data = df.groupby(['컬럼1', '컬럼2'])
# 개수 세기
count_data = grouped_data.size().unstack()
# 결과 표시
print(count_data)
출력:
1 2 3
컬럼1
A 1 1 0
B 0 1 1
C 1 0 1
설명:
groupby()
함수는 데이터 프레임을 지정된 열에 따라 그룹으로 나눕니다. 이 경우 '컬럼1'과 '컬럼2' 열을 기준으로 그룹화합니다.size()
함수는 각 그룹의 행 개수를 계산합니다.unstack()
함수는 다중 수준 인덱스를 단일 수준 인덱스로 변환합니다.
추가 정보:
- 조건에 따라 그룹화하려면
filter()
함수를 사용할 수 있습니다. - 다른 집계 함수를 사용하여 평균, 합계, 최소값, 최대값 등을 계산할 수 있습니다.
import pandas as pd
# 샘플 데이터 세트 만들기
data = {'컬럼1': ['A', 'A', 'B', 'C', 'C', 'B', 'D', 'D', 'A', 'B'],
'컬럼2': [1, 2, 3, 1, 2, 3, 4, 5, 1, 3],
'컬럼3': ['X', 'Y', 'Z', 'Y', 'X', 'Z', 'Y', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)
# 두 개의 열을 기준으로 그룹화 및 개수 세기
grouped_data = df.groupby(['컬럼1', '컬럼2']).size().unstack()
# 결과 표시
print(grouped_data)
1 2 3 4 5
컬럼1
A 2 1 1 0 1
B 1 1 1 0 0
C 1 0 1 0 0
D 0 1 0 1 0
- 이 예제에서는 '컬럼3' 열을 추가하여 데이터 프레임을 확장했습니다.
groupby()
함수는 여전히 '컬럼1'과 '컬럼2' 열을 기준으로 그룹화합니다.
변경 사항:
- 데이터 세트에 '컬럼3' 열이 추가되었습니다.
- 그룹화된 데이터 프레임에는 '컬럼3' 열이 반영되지 않습니다.
- 결과 출력에는 '컬럼3' 열이 포함되지 않습니다.
Pandas DataFrame에서 두 개의 열을 기준으로 그룹화하고 개수를 세는 대체 방법
value_counts() 함수 사용:
import pandas as pd
# 샘플 데이터 세트 만들기
data = {'컬럼1': ['A', 'A', 'B', 'C', 'C', 'B', 'D', 'D', 'A', 'B'],
'컬럼2': [1, 2, 3, 1, 2, 3, 4, 5, 1, 3],
'컬럼3': ['X', 'Y', 'Z', 'Y', 'X', 'Z', 'Y', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)
# 두 개의 열을 기준으로 그룹화 및 개수 세기
count_data = df.groupby(['컬럼1', '컬럼2'])['컬럼1'].value_counts().unstack()
# 결과 표시
print(count_data)
value_counts()
함수는 특정 열의 값별 개수를 계산합니다.- 이 경우 '컬럼1' 열의 값별 개수를 '컬럼2' 열에 따라 그룹화합니다.
pivot_table() 함수 사용:
import pandas as pd
# 샘플 데이터 세트 만들기
data = {'컬럼1': ['A', 'A', 'B', 'C', 'C', 'B', 'D', 'D', 'A', 'B'],
'컬럼2': [1, 2, 3, 1, 2, 3, 4, 5, 1, 3],
'컬럼3': ['X', 'Y', 'Z', 'Y', 'X', 'Z', 'Y', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)
# 두 개의 열을 기준으로 그룹화 및 개수 세기
count_data = pd.pivot_table(df, values='컬럼1', index=['컬럼1'], columns=['컬럼2'], aggfunc='count')
# 결과 표시
print(count_data)
pivot_table()
함수는 다차원 테이블을 만들 수 있는 강력한 함수입니다.- 이 경우 '컬럼1' 값을 행으로, '컬럼2' 값을 열로, '컬럼1' 개수를 값으로 표시하는 피벗 테이블을 만듭니다.
직접 for 루프 사용:
import pandas as pd
# 샘플 데이터 세트 만들기
data = {'컬럼1': ['A', 'A', 'B', 'C', 'C', 'B', 'D', 'D', 'A', 'B'],
'컬럼2': [1, 2, 3, 1, 2, 3, 4, 5, 1, 3],
'컬럼3': ['X', 'Y', 'Z', 'Y', 'X', 'Z', 'Y', 'X', 'Y', 'Z']}
df = pd.DataFrame(data)
# 두 개의 열을 기준으로 그룹화 및 개수 세기
count_data = {}
for col1, col2 in zip(df['컬럼1'], df['컬럼2']):
if (col1, col2) not in count_data.keys():
count_data[(col1, col2)] = 0
count_data[(col1, col2)] += 1
# 결과 프레임 만들기
result_df = pd.DataFrame.from_dict(count_data, orient='index', columns=['개수'])
result_df.index.names = ['컬럼1', '컬럼2']
# 결과 표시
print(result_df)
- 직접 for 루프를 사용하여 각 그룹의 개수를 계산합니다.
- 딕셔너리 'count_data'를 사용하여 그룹과 개수를 저장합니다.
pd.DataFrame.from_dict()
함수를 사용하여 딕셔너리를 데이터
python pandas dataframe