スポンサーリンク
pandasのDataFrameでマルチインデックスにして曜日毎の操作をする
インデックスをdatetime型にしてDataFrameを作成
まずは、インデックスをdatetime型にしてDataFrameを作成します。
DataFrame = pd.read_csv('in.txt', names=('Date', 'Value'), index_col='Date', parse_dates=True)
スポンサーリンク
DataFrame.set_index()でweekday_nameをインデックスに追加設定する
DataFrame.set_index()でweekday_nameをインデックスに追加設定して、マルチインデックスにします。
DataFrameAfter = DataFrame.set_index([DataFrame.index.weekday_name, DataFrame.index])
マルチインデックスしたインデックス名を整理
上記のままだと、曜日のインデックス名が"Date"となっているので、下記のように曜日と日付のインデックス名を設定します。
DataFrameAfter.index.names = ['week', 'date']
sort_index()で、必要に応じて曜日をキーにソート
sort_index()で、必要に応じて曜日をキーにソートします。
DataFrameAfter.sort_index()
曜日毎の総和を出力
あとは、それぞれのメソッドを使って処理するだけです。
sum()で曜日毎の総和を求めます。
print(DataFrameAfter.sum(level='week'))
曜日毎の平均を出力
mean()で曜日毎の平均を求めます。
print(DataFrameAfter.mean(level='week'))
曜日毎の最大値を出力
max()で曜日毎の最大値を求めます。
print(DataFrameAfter.max(level='week'))
曜日毎の最小値を出力
min()で曜日毎の最小値を求めます。
print(DataFrameAfter.min(level='week'))
サンプルコード
サンプルコードになります。
下記のように、in.txtがあったとします。
$ cat in.txt 20150301,0 20150302,1 20150303,2 20150304,3 20150305,4 20150306,5 20150307,6 20150308,7 20150309,8 20150310,9 20150311,10 20150312,11 20150313,12 20150314,13 20150315,14 20150316,15 20150317,16 20150318,17 20150319,18 20150320,19 20150321,20 20150322,21
下記がサンプルコードになります。
$ 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.weekday_name, DataFrame.index]) #インデックスの名前を変更 DataFrameAfter.index.names = ['week', 'date'] #インデックスをキーにソートする DataFrameAfter.sort_index() print("曜日毎の総和を出力") print(DataFrameAfter.sum(level='week')) print("曜日毎の平均を出力") print(DataFrameAfter.mean(level='week')) print("曜日毎の最大値を出力") print(DataFrameAfter.max(level='week')) print("曜日毎の最小値を出力") print(DataFrameAfter.min(level='week'))
下記が実行結果になります。曜日毎の総和・平均・最大値・最小値が一覧できるのが確認できます。
$ ./sample.py 曜日毎の総和を出力 Value week Sunday 42 Monday 24 Tuesday 27 Wednesday 30 Thursday 33 Friday 36 Saturday 39 曜日毎の平均を出力 Value week Sunday 10.5 Monday 8.0 Tuesday 9.0 Wednesday 10.0 Thursday 11.0 Friday 12.0 Saturday 13.0 曜日毎の最大値を出力 Value week Sunday 21 Monday 15 Tuesday 16 Wednesday 17 Thursday 18 Friday 19 Saturday 20 曜日毎の最小値を出力 Value week Sunday 0 Monday 1 Tuesday 2 Wednesday 3 Thursday 4 Friday 5 Saturday 6
スポンサーリンク