【保存版】Pandasで年末かどうかを瞬時に判定!「pandas.Timestamp.is_year_end」のしくみとサンプルコード集


Pandasライブラリは、データ分析における作業を効率化するための強力なツールです。pandas.Timestampオブジェクトは、日付と時刻情報を扱う際に非常に役立ちます。pandas.Timestamp.is_year_endメソッドは、その名の通り、指定された日付が年末であるかどうかを判定します。

詳細解説

pandas.Timestamp.is_year_endメソッドは、引数としてTimestampオブジェクトを受け取り、それが年末であるかどうかをTrueまたはFalseで返します。年末とは、12月31日を指します。

import pandas as pd

# 2023年12月31日を作成
dt = pd.Timestamp('2023-12-31')

# 判定
is_year_end = dt.is_year_end()
print(is_year_end)  # True

# 2024年1月1日を作成
dt = pd.Timestamp('2024-01-01')

# 判定
is_year_end = dt.is_year_end()
print(is_year_end)  # False

応用例

pandas.Timestamp.is_year_endメソッドは、年末処理が必要なデータ分析タスクに役立ちます。例えば、以下の用途で使用できます。

  • 年間データの集計
  • 年末キャンペーンの開始/終了判定
  • 年末調整のためのデータ抽出
  • 年末の売上分析
  • 引数としてSeriesDataFrameを受け取ることもできます。その場合、それぞれの要素に対して個別に判定が行われます。
  • リープイヤー(閏年)の場合も、12月31日を年末と判定します。

pandas.Timestamp.is_year_endメソッドは、年末判定を簡単に行える便利なツールです。データ分析タスクを効率化するために、ぜひ活用してみてください。

  • PandasのTimestampオブジェクトに関する他の属性やメソッドについても、公式ドキュメントを参照してください。


import pandas as pd

# データ作成
data = {
    '日付': pd.to_datetime(['2023-12-25', '2023-12-30', '2023-12-31', '2024-01-03']),
    '売上': [100, 200, 350, 50]
}

df = pd.DataFrame(data)

# 年末判定
df['年末判定'] = df['日付'].dt.is_year_end()

# 年末の売上
年末売上 = df[df['年末判定'] == True]['売上'].sum()

print(f"年末の売上: {年末売上}")

年末調整データ抽出

import pandas as pd

# データ作成
data = {
    '社員名': ['田中', '佐藤', '鈴木'],
    '給与': [1000000, 800000, 700000],
    '賞与': [500000, 300000, 200000],
    '支払日': pd.to_datetime(['2023-12-25', '2023-12-31', '2024-01-10'])
}

df = pd.DataFrame(data)

# 年末調整対象データ抽出
年末調整対象 = df[df['支払日'].dt.is_year_end()]

print(f"年末調整対象データ:")
print(年末調整対象)

年末キャンペーン判定

import pandas as pd

# データ作成
data = {
    'キャンペーン名': ['年末セール', '冬物セール', '新春セール'],
    '開始日': pd.to_datetime(['2023-12-20', '2023-12-01', '2024-01-05']),
    '終了日': pd.to_datetime(['2024-01-03', '2024-02-29', '2024-01-15'])
}

df = pd.DataFrame(data)

# 現在の日付
today = pd.Timestamp('2024-06-14')

# 実施中のキャンペーン判定
実施中キャンペーン = df[(today >= df['開始日']) & (today <= df['終了日'])]

print(f"実施中のキャンペーン:")
print(実施中キャンペーン)
import pandas as pd

# データ作成
data = {
    '日付': pd.to_datetime(['2023-01-01', '2023-02-01', '2023-03-01', '2023-12-01', '2024-01-01']),
    '売上': [100, 200, 300, 400, 500]
}

df = pd.DataFrame(data)

# 年間売上集計
年間売上 = df.resample('Y')['売上'].sum()

print(f"年間売上:")
print(年間売上)


月と日を比較

最もシンプルな代替方法は、month属性とday属性を比較する方法です。

import pandas as pd

# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = (dt.month == 12) & (dt.day == 31)
print(is_year_end)  # True

strftime関数を使用

strftime関数を使用して、フォーマット文字列%m%dで日付を文字列に変換し、比較する方法もあります。

import pandas as pd

# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = (dt.strftime('%m%d') == '1231')
print(is_year_end)  # True

カスタム関数を使用

より複雑な判定が必要な場合は、カスタム関数を作成することもできます。

import pandas as pd

def is_year_end(dt):
    """
    指定された日付が年末かどうかを判定する関数

    Args:
        dt (pandas.Timestamp): 判定対象の日付

    Returns:
        bool: 年末である場合はTrue、そうでなければFalse
    """
    return (dt.month == 12) & (dt.day == 31)

# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = is_year_end(dt)
print(is_year_end)  # True

NumPyを使用した判定

NumPyライブラリを使用すれば、より高速な判定が可能になります。

import pandas as pd
import numpy as np

# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = np.logical_and(dt.month == 12, dt.day == 31)
print(is_year_end)  # True

選択のポイント

どの代替方法を選択するかは、状況によって異なります。

  • 可読性: 状況に合わせて、最も分かりやすい方法を選択しましょう。
  • 柔軟性: カスタム関数を使用すれば、より複雑な判定が可能になります。
  • 処理速度: NumPyを使用した判定が最も高速です。
  • シンプルさ: 月と日を比較する方法が最もシンプルです。
  • 上記はあくまでも代替方法の一例です。状況に合わせて、自由に選択してください。