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

Python Pandas로 DataFrame의 윤년 개수 계산하는 방법

이 글에서는 pandas를 사용해 주어진 DataFrame에 포함된 윤년(leap year)의 총 개수를 구하는 방법을 알아보겠습니다.

문제 정의

연도(year)와 해당 연도의 일수(days)를 담고 있는 DataFrame이 있다고 가정해 보겠습니다.

DataFrame is
  year days
0 2002 365
1 2004 366
2 2012 366
3 2018 365
4 2020 366

윤년은 2월이 29일까지 있어 한 해가 366일인 해를 의미합니다. 따라서 위 데이터에서 윤년은 2004년, 2012년, 2020년으로 총 3개입니다.

풀이 접근 방법

이 문제는 다음 단계로 해결할 수 있습니다.

  • 먼저 연도와 일수 데이터를 담은 DataFrame을 생성합니다.

  • 윤년 판별 조건을 설정합니다. 즉, year % 4 == 0(4로 나누어 떨어지는 해)이면서 동시에 days == 366(일수가 366일)인 행만 필터링합니다.

  • 조건에 맞는 결과 DataFrame의 길이(len())를 출력하면 윤년의 개수를 얻을 수 있습니다.

조건 필터링 코드

df[(df['year']%4==0) & (df['days']==366)]

전체 예제 코드

아래는 위 접근 방식을 실제로 구현한 전체 코드입니다.

import pandas as pd

data = {'year': [2002, 2004, 2012, 2018, 2020],
        'days': [365, 366, 366, 365, 366]}

df = pd.DataFrame(data)

# 4로 나누어 떨어지면서 일수가 366일인 행만 추출
df1 = df[(df['year']%4==0) & (df['days']==366)]

print("Count is", len(df1))

실행 결과

Count is 3

추가 설명

여기서 사용한 조건 year % 4 == 0은 간단한 윤년 판별법입니다. 실제 그레고리력 기준으로는 100으로 나누어 떨어지지만 400으로 나누어 떨어지지 않는 해(예: 1900년)는 윤년이 아니므로, 더 정확한 판별이 필요하다면 다음과 같은 조건을 사용할 수 있습니다.

is_leap = (df['year']%4==0) & ((df['year']%100!=0) | (df['year']%400==0))
count = len(df[is_leap & (df['days']==366)])

다만 본 예제처럼 일수(days) 정보가 함께 주어진 경우에는 days == 366 조건만으로도 충분히 정확하게 윤년을 걸러낼 수 있습니다.