月ごとにデータを集計する際、groupby
とto_period
使うことで簡単に合計値やデータ数を算出できます。
1. サンプルデータの準備
まず、日付と数値データを含むサンプルデータフレームを作成します。
import pandas as pd
# サンプルデータ
data = {
'日付': ['2024-01-01', '2024-01-15', '2024-02-01', '2024-02-20', '2024-03-01'],
'値': [100, 200, 150, 300, 400]
}
df = pd.DataFrame(data)
# 日付を datetime 型に変換
df['日付'] = pd.to_datetime(df['日付'])
print(df)
出力結果
日付 値
0 2024-01-01 100
1 2024-01-15 200
2 2024-02-01 150
3 2024-02-20 300
4 2024-03-01 400
2. 月ごとにデータを集計
日付データを月ごとにグループ化し、合計値とデータ数を集計します。
# 月列を追加(年-月単位)
df['月'] = df['日付'].dt.to_period('M')
# 合計値とデータ数を集計
monthly_stats = df.groupby('月').agg(合計値=('値', 'sum'), データ数=('値', 'count')).reset_index()
# 結果を表示
print(monthly_stats)
3. 結果
出力結果
月 合計値 データ数
0 2024-01 300 2
1 2024-02 450 2
2 2024-03 400 1
4. コードの解説
1. 月単位の期間列を作成
df['月'] = df['日付'].dt.to_period('M')
dt.to_period(‘M’) を使うことで、「年-月」の形式に変換します。
2. 集計処理
df.groupby('月').agg(合計値=('値', 'sum'), データ数=('値', 'count'))
• sum で合計値を計算。
• count でデータ数を集計。
• aggメソッドを使うと、複数の集計を同時に行えます。
3. 結果の整形
reset_index() でグループ化された「月」列をデータフレームの一部として戻します。
まとめ
この方法を使えば、月ごとのデータの傾向や量を一目で確認できます。 特に売上データやアクセスログの分析に便利です。
コード全体
最後に全コードをまとめておきます。
import pandas as pd
# サンプルデータ
data = {
'日付': ['2024-01-01', '2024-01-15', '2024-02-01', '2024-02-20', '2024-03-01'],
'値': [100, 200, 150, 300, 400]
}
df = pd.DataFrame(data)
# 日付を datetime 型に変換
df['日付'] = pd.to_datetime(df['日付'])
# 月ごとに合計値とデータ数を集計
df['月'] = df['日付'].dt.to_period('M')
monthly_stats = df.groupby('月').agg(合計値=('値', 'sum'), データ数=('値', 'count')).reset_index()
# 結果を表示
print(monthly_stats)
コメント