2016-12-23 4 views
3

私はパンダを使って15分を1時間に再サンプリングしようとしていますが、カスタム機能を適用しています。私のDataFrameはこの形式です。パンダリサンプルカスタム機能を適用しますか?

Date      val1  val2     
2016-01-30 07:00:00  49.0  45.0 
2016-01-30 07:15:00  49.0  44.0 
2016-01-30 07:30:00  52.0  47.0 
2016-01-30 07:45:00  60.0  46.0 
2016-01-30 08:00:00  63.0  61.0 
2016-01-30 08:15:00  61.0  60.0 
2016-01-30 08:30:00  62.0  61.0 
2016-01-30 08:45:00  63.0  61.0 
2016-01-30 09:00:00  68.0  60.0 
2016-01-30 09:15:00  71.0  70.0 
2016-01-30 09:30:00  71.0  70.0 

私はこの機能で再サンプリングしたいです。

def log_add(array_like): 
    return (10*math.log10((sum([10**(i/10) for i in array_like]))))) 

です。

df.resample('1H').apply(log_add) 

しかし、これは空のdfを返します。

df.resample('1H').apply(lambda x: log_add(x)) 

も同じです。誰もが、なぜその機能を適切に適用しないのでしょうか?

ありがとうございます、ありがとうございます。

+0

あなたは 'df.resample( '1H').gg(...)'を使ってみたいと思います。オブジェクトを再サンプルするのはグループバイぐらいです。 – pbreach

答えて

3

あなたは0.19.0 pandasで実装されているものをパラメータonを追加することができます。

print (df.resample('1H', on='Date').apply(log_add)) 

それともset_indexによってindexDateを設定する:

df.set_index('Date', inplace=True) 
print (df.resample('1H').apply(log_add)) 

もない場合は、列Datedtypeは、datetimeであれば、最初のチェックto_datetime

print (df.dtypes) 
Date  object 
val1 float64 
val2 float64 
dtype: object 

df.Date = pd.to_datetime(df.Date) 

print (df.dtypes) 
Date datetime64[ns] 
val1   float64 
val2   float64 
dtype: object 
+1

返事ありがとうございますが、残念ながらこれはうまくいきませんでした。日付はすでにインデックスであり、resampleは 'sum'のような通常の関数で動作しますので、私のカスタムfuncは間違っていると思っていますが、その理由は分かりません。 –

+0

@JasonBカップルポイント。 'math'の代わりに' numpy'を使用し、Python 2を使用している場合、関数は整数除算のため正しく機能しません。 'from __future__ import division'でコードを再実行してください。 –

+0

ポイントありがとうございます。私は現在Python 3も使用しています。 –

関連する問題