2013-03-08 3 views
15

私は以下の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分単位の時系列であることと、その月平均で最後の列の値を分割することができますか?

答えて

21

まずハタを行います

import pandas as pd 

In [1]: grouper = pd.TimeGrouper("1M") 

次に、あなたの新しい列にする:1ヶ月のチャンクには、グループのデータをgroupby方法にハタを渡すこと

In [2]: df['normed'] = df.groupby(grouper).transform(lambda x: x/x.mean()) 

を。各チャンク内で、その月の平均で15分間隔のデータを分割します。

3

一般的に、TimeGrouperではなくGrouperを使用することをお勧めします。 thisをご覧ください。 たとえば、カラムは日付と呼ばれている場合は、代わりにTimeGrouperを使用しての

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

を使用してZelazny7が提案@のように続けます。 あなたのカラムがdatetime型のインデックスでない場合、これは、と1行で行うことができ

df['Date'] = pd.to_datetime(df['Date']) 
0

を使用します。

df.groupby([df.index.year, df.index.month]).transform(lambda x: x/x.mean()) 
関連する問題