スポンサーリンク

pandasのDataFrameでマルチインデックスにして月毎の操作をする

インデックスをdatetime型にしてDataFrameを作成

まずは、インデックスをdatetime型にしてDataFrameを作成します。
参考:pandas.read_csv()のindex_colの指定とparse_dates=Trueで、インデックスの列をdatetime型に変換

DataFrame = pd.read_csv('in.txt',
				names=('Date', 'Value'),
				index_col='Date',
				parse_dates=True)

スポンサーリンク

DataFrame.set_index()でmonthをインデックスに追加設定する

DataFrame.set_index()でmonthをインデックスに追加設定して、マルチインデックスにします。

DataFrameAfter = DataFrame.set_index([DataFrame.index.month, DataFrame.index])

マルチインデックスしたインデックス名を整理

上記のままだと、月のインデックス名が"Date"となっているので、下記のように月と日付のインデックス名を設定します。

DataFrameAfter.index.names = ['month', 'date']

sort_index()で、必要に応じて月をキーにソート

sort_index()で、必要に応じて月をキーにソートします。

DataFrameAfter.sort_index()

月毎の総和を出力

あとは、それぞれのメソッドを使って処理するだけです。
sum()で月毎の総和を求めます。

print(DataFrameAfter.sum(level='month'))

月毎の平均を出力

mean()で月毎の平均を求めます。

print(DataFrameAfter.mean(level='month'))

月毎の最大値を出力

max()で月毎の最大値を求めます。

print(DataFrameAfter.max(level='month'))

月毎の最小値を出力

min()で月毎の最小値を求めます。

print(DataFrameAfter.min(level='month'))

サンプルコード

サンプルコードになります。
下記のように、in.txtがあったとします。

 $ cat in.txt 
20010101,0
20010102,1
20010203,2
20010204,3
20010305,4
20010306,5
20010407,6
20010508,7
20010509,8
20010510,9

下記がサンプルコードになります。
 $ cat sample.py 
#!/usr/bin/env python3
# coding: UTF-8

import pandas as pd

DataFrame = pd.read_csv('in.txt',
				names=('Date', 'Value'),
				index_col='Date',
				parse_dates=True)

#マルチインデックスを設定
DataFrameAfter = DataFrame.set_index([DataFrame.index.month, DataFrame.index])
#インデックスの名前を変更
DataFrameAfter.index.names = ['month', 'date']
#インデックスをキーにソートする
DataFrameAfter.sort_index()	

print("月毎の総和を出力")
print(DataFrameAfter.sum(level='month'))

print("月毎の平均を出力")
print(DataFrameAfter.mean(level='month'))

print("月毎の最大値を出力")
print(DataFrameAfter.max(level='month'))

print("月毎の最小値を出力")
print(DataFrameAfter.min(level='month'))

下記が実行結果になります。月毎の総和・平均・最大値・最小値が一覧できるのが確認できます。
 $ ./sample.py 
月毎の総和を出力
       Value
month       
1          1
2          5
3          9
4          6
5         24
月毎の平均を出力
       Value
month       
1        0.5
2        2.5
3        4.5
4        6.0
5        8.0
月毎の最大値を出力
       Value
month       
1          1
2          3
3          5
4          6
5          9
月毎の最小値を出力
       Value
month       
1          0
2          2
3          4
4          6
5          7

スポンサーリンク