次の15分のデータをdataframe
として3年間持っています。最初の2列がインデックスです。
2014-01-01 00:15:00 1269.6
2014-01-01 00:30:00 1161.6
2014-01-01 00:45:00 1466.4
2014-01-01 01:00:00 1365.6
2014-01-01 01:15:00 1362.6
2014-01-01 01:30:00 1064.0
2014-01-01 01:45:00 1171.2
2014-01-01 02:00:00 1171.0
2014-01-01 02:15:00 1330.4
2014-01-01 02:30:00 1309.6
2014-01-01 02:45:00 1308.4
2014-01-01 03:00:00 1494.0
resample
を使用して、月平均の2番目のシリーズを取得しました。
data_Monthly = data.resample('1M', how='mean')
最後の列の値を月間平均で割ると、結果は15分の粒度の時系列のままになりますか?
最初にハタを作ります:
import pandas as pd
In [1]: grouper = pd.TimeGrouper("1M")
次に、新しい列を作成します。
In [2]: df['normed'] = df.groupby(grouper).transform(lambda x: x/x.mean())
Grouperをgroupby
メソッドに渡すことで、データを1か月のチャンクにグループ化します。各チャンク内で、15分間隔のデータをその月の平均で割ります。
一般的に、TimeGrouperの代わりにGrouperを使用することをお勧めします。 this を見てください。たとえば、列の名前がDateの場合は、
grouper = pd.Grouper(key='Date', freq='M')
timeGrouperを使用する代わりに、@ Zelazny7が提案したように続行します。列が日時インデックスでない場合は、
df['Date'] = pd.to_datetime(df['Date'])
これは、次の方法で1行で実行できます。
df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean())