Pandas DataFrame에서 합계(sum)를 기준으로 특정 행을 필터링하는 방법을 학생 점수 예제를 통해 살펴보겠습니다.
예제 시나리오는 다음과 같습니다. 3명의 학생이 있고, 각 과목별로 세 학생의 점수 합계가 200점을 초과하는지 확인해야 합니다. 만약 어떤 행(레코드)에서 세 학생 점수의 총합이 200 이하라면 해당 행은 결과에서 제외됩니다. 즉, sum() 함수를 활용해 조건에 맞는 행만 남기는 필터링 작업입니다.
1단계: 샘플 DataFrame 생성
먼저 3명의 학생 점수를 담은 3개의 열(column)로 구성된 DataFrame을 생성합니다.
import pandas as pd
dataFrame = pd.DataFrame({
'Jacob_Marks': [95, 90, 70, 85, 88],
'Ted_Marks': [60, 50, 65, 85, 70],
'Jamie_Marks': [77, 76, 60, 45, 50]
})각 행(row)은 하나의 레코드를 의미하며, 각 열은 학생별 점수 목록입니다.
2단계: 행 단위 합계로 필터링
행 기준으로 합계를 계산하려면 sum(axis=1)을 사용합니다. axis=1은 열 방향이 아닌 행 방향으로 더한다는 의미입니다. 그런 다음 불리언 인덱싱(Boolean Indexing)으로 합계가 200보다 큰 행만 추출합니다.
dataFrame = dataFrame[dataFrame.sum(axis=1) > 200]
전체 예제 코드
아래는 위 과정을 모두 포함한 완성된 코드입니다.
import pandas as pd
# 3개의 열을 가진 DataFrame 생성
dataFrame = pd.DataFrame({
'Jacob_Marks': [95, 90, 70, 85, 88],
'Ted_Marks': [60, 50, 65, 85, 70],
'Jamie_Marks': [77, 76, 60, 45, 50]
})
print("Dataframe...\n", dataFrame)
# 행 기준으로 필터링
# 3명의 학생 점수 합계가 200보다 큰 행만 추출
dataFrame = dataFrame[dataFrame.sum(axis=1) > 200]
print("Updated Dataframe...\n", dataFrame)실행 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
Dataframe...
Jacob_Marks Jamie_Marks Ted_Marks
0 95 77 60
1 90 76 50
2 70 60 65
3 85 45 85
4 88 50 70
Updated Dataframe...
Jacob_Marks Jamie_Marks Ted_Marks
0 95 77 60
1 90 76 50
3 85 45 85
4 88 50 70결과 분석
출력 결과를 보면 인덱스 2번 행(Jacob 70 + Ted 65 + Jamie 60 = 195)만 제거되었습니다. 세 학생의 점수 합계가 195로 조건인 200을 넘지 못했기 때문입니다. 나머지 행들은 모두 합계가 200을 초과하여 그대로 유지되었습니다.
핵심 정리
dataFrame.sum(axis=1): 각 행의 값들을 가로 방향으로 합산합니다.> 200과 같은 비교 연산자와 결합하면 불리언 마스크가 생성됩니다.- 불리언 마스크를 대괄호 안에 넣으면(
df[mask]) 조건을 만족하는 행만 선택됩니다. - 조건을 반대로 바꾸면(<= 200) 합계가 200 이하인 행만 필터링할 수도 있습니다.