パンダ: groupby() を使用して時系列をリサンプリングする方法
時系列データのリサンプリングとは、新しい期間にわたってデータを集計することを意味します。
groupby演算子を使用してパンダで時系列をリサンプリングする場合は、次の基本構文を使用できます。
group = df. groupby ([pd. Group (freq=' W '), ' store ']) result = group[' sales ']. sum (). unstack (' store '). fillna (0)
この特定の例では、DataFrame の行を店舗列ごとにグループ化し、時系列を週ごとにリサンプリングし ( freq=’W’ )、次にsales列の値の合計を計算します。
時系列データを次のような異なる期間にリサンプリングできることに注意してください。
- S : 秒
- min : 分
- H : 時間
- J :日
- W : 週
- M :月
- Q : 四半期
- A : 年
次の例は、実際にgroupby操作を使用して時系列データをリサンプリングする方法を示しています。
例: Pandas の groupby を使用して時系列をリサンプリングする
2 つの異なる店舗で毎日行われた合計売上高を示す次のパンダ データフレームがあるとします。
import pandas as pd #createDataFrame df = pd. DataFrame ({' sales ': [13, 14, 17, 17, 16, 22, 28, 10, 17, 10, 11], ' store ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'B']} , index=pd. date_range ('2023-01-06', '2023-01-16', freq='d')) #view DataFrame print (df) sales store 2023-01-06 13 A 2023-01-07 14 A 2023-01-08 17 A 2023-01-09 17 A 2023-01-10 16A 2023-01-11 22 B 2023-01-12 28 B 2023-01-13 10 B 2023-01-14 17 B 2023-01-15 10 B 2023-01-16 11 B
行を店舗ごとにグループ化し、時系列を週ごとにリサンプリングして、売上列の値の合計を計算したいとします。
これを行うには、次の構文を使用できます。
#group by store and resample time series by week group = df. groupby ([pd. Group (freq=' W '), ' store ']) #calculate sum of sales each week by store result = group[' sales ']. sum (). unstack (' store '). fillna (0) #view results print (result) store AB 2023-01-08 14.0 0.0 2023-01-15 16.5 17.0 2023-01-22 0.0 11.0
結果から次のことがわかります。
- 店舗 A の 2023 年 1 月 8 日までの週の売上の合計は14です。
- 店舗 B の 2023 年 1 月 8 日までの週の売上の合計は0です。
等々。
この例では、 sales列の値の合計を計算することを選択していることに注意してください。
ただし、数、平均、中央値、最小、最大などの他の指標を選択することもできます。
上記のコードのsum() をcount() 、 Mean() 、 Median()などに置き換えるだけです。選択したメトリックを計算します。
追加リソース
次のチュートリアルでは、Python で他の一般的な操作を実行する方法について説明します。
Matplotlib で時系列をプロットする方法
Seaborn で時系列をプロットする方法
Python で時系列から MAPE を計算する方法