PythonでDataFrame内のうるう年(閏年)の総数をカウントする方法
はじめに
pandasのDataFrameに格納された「年」と「日数」のデータから、うるう年(閏年)が何回現れるかをカウントする方法を解説します。条件式によるフィルタリングとlen()関数を組み合わせることで、シンプルに実装できます。
入力データ
以下のようなDataFrameを想定します。
year days 0 2002 365 1 2004 366 2 2012 366 3 2018 365 4 2020 366
この中で、2004年・2012年・2020年の3つがうるう年に該当します。
期待される出力
Count the number of leap years are:- 3
解決のアプローチ
- まず対象となるDataFrameを定義します。
- 次に、「年が4で割り切れる」かつ「日数が366日である」という条件でDataFrameをフィルタリングします。具体的には以下のように記述します。
df[(df['year'] % 4 == 0) & (df['days'] == 366)]
- 最後に、抽出されたDataFrameの行数を
len()で取得して出力します。
実装例
実際のコードを見てみましょう。
import pandas as pd
data = {'year': [2002, 2004, 2012, 2018, 2020],
'days': [365, 366, 366, 365, 366]}
df = pd.DataFrame(data)
df1 = df[(df['year'] % 4 == 0) & (df['days'] == 366)]
print("Count is", len(df1))出力結果
Count is 3
補足:より厳密なうるう年の判定について
上記の条件式は簡易的な判定方法です。厳密なグレゴリオ暦のルールでは、うるう年は以下のように定義されます。
- 4で割り切れる年はうるう年である
- ただし、100で割り切れる年は平年である
- さらに、400で割り切れる年はうるう年である(例:2000年はうるう年、1900年は平年)
このルールを反映させたい場合は、以下のようにカスタム関数を.apply()で適用すると確実です。
def is_leap(year):
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
count = df[df['year'].apply(is_leap)].shape[0]
print("Count is", count)このように、データの性質や求める精度に応じて判定条件を選択することで、正確な集計が可能になります。
-
セットを使って文字列内の母音の数をカウントするPythonプログラム
本記事では、Pythonを使って文字列内に含まれる母音の数をカウントする方法について解説します。セット(set)を活用した効率的な実装を中心に、初心者の方にもわかりやすく説明していきます。 問題の概要 問題文:任意の文字列が与えられたとき、その文字列に含まれる母音の数をセットを使って数えます。 基本的なアプローチとしては、文字列全体を先頭から順に走査し、各文字が母音であるかどうかを判定します。母音であればカウントを1ずつ増やしていき、最終的な合計を出力します。 実装例 def vowel_count(str_): count = 0 # 母音をセットとして定義 vowe
-
Pythonで数値の合計ビット数をカウントするプログラムの作成方法
まず数値を入力し、bin()関数を使ってその数値を2進数に変換します。次に出力される文字列の先頭2文字「0b」を削除し、最後に2進数文字列の長さを計算することで、合計ビット数を求めることができます。 実行例 入力:200 出力:8 解説 200の2進数表現は 11001000 です(8桁=8ビット) アルゴリズム ステップ1:数値を入力する。 ステップ2:bin()関数を使用して、数値を2進数に変換する。 ステップ3:bin()関数は出力文字列の先頭に「0b」という接頭辞を付加するため、 出力された2進数文字列から最初の2文字「0b」を削除する。 ステップ4:2進