web-dev-qa-db-ja.com

データフレームの単一の値を月平均で割るにはどうすればよいですか?

次の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分の粒度の時系列のままになりますか?

17
Markus W

最初にハタを作ります:

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分間隔のデータをその月の平均で割ります。

22
Zelazny7

一般的に、TimeGrouperの代わりにGrouperを使用することをお勧めします。 this を見てください。たとえば、列の名前がDateの場合は、

grouper = pd.Grouper(key='Date', freq='M')

timeGrouperを使用する代わりに、@ Zelazny7が提案したように続行します。列が日時インデックスでない場合は、

df['Date'] = pd.to_datetime(df['Date'])
8
Manik bhandari

これは、次の方法で1行で実行できます。

df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean())
0
Warren O'Neill