Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – 합계를 기준으로 DataFrame의 행 필터링하는 방법

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 이하인 행만 필터링할 수도 있습니다.