pandasで扱う時系列データ(シリーズやデータフレームのインデックス)は、必ずしも一意なデータになっているとは限らない。
場合によっては一つのタイムスタンプに対して、複数のデータを持たせることもあるだろう。
そのような重複した時系列データを扱う例を今回は紹介していく。
まず、次のようなデータがあるとしよう。
import pandas as pd import numpy as np dates = pd.DatetimeIndex([ '10/1/2019', '10/2/2019', '10/2/2019', '10/2/2019', '10/3/2019' ]) ts = pd.Series(np.arange(5), index=dates) # 2019-10-01 0 # 2019-10-02 1 # 2019-10-02 2 # 2019-10-02 3 # 2019-10-03 4 # dtype: int64
時系列が一意かどうかを確認する
インデックスが一意(ユニーク)でないことは、is_unique属性を見ると確認できる。
ts.index.is_unique # False
重複した時系列を持つデータを参照する
重複した時系列を持つデータを参照する場合、タイムスタンプが重複しているかどうかで、得られるデータの形式は変わる。
下記のとおり、重複していない場合はスカラー値が戻され、重複している場合はデータの集合が戻される。
ts['10/3/2019'] # 重複していない # 4 ts['10/2/2019'] # 重複している # 2019-10-02 1 # 2019-10-02 2 # 2019-10-02 3 # dtype: int64
重複した時系列を持つデータを集約する
このようなデータを集約する場合は、groupby関数を使用し、level=0を指定すると良い。
grouped = ts.groupby(level=0) grouped.sum() # 2019-10-01 0 # 2019-10-02 6 # 2019-10-03 4 # dtype: int64 grouped.mean() # 2019-10-01 0 # 2019-10-02 2 # 2019-10-03 4 # dtype: int64