2017-10-26 22 views
1

に別の列に基づいて、パンダのデータフレーム内の値を計算することができ、私は同じデータフレーム内の別の列から計算されているパンダのデータフレーム内の値の新しい列を作成しようとしています:はどのように私は同じデータフレーム

df['ema_ideal'] = df['Adj Close'].ewm(span=df['ideal_moving_average'], min_periods=0, ignore_na=True).mean 

はしかし、私はエラーが発生します:

ValueError: The truth of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any(), or a.all(). 

私は30からspanセット、またはいくつかの整数を持っている場合、私はこのエラーを受信しません。また、ideal_moving_averageはfloatの列です。

私の2つの質問は:

エラーが表示されるのはなぜですか?

どのように私はdf['ema_ideal']列にideal_moving_averageから列の値を組み込むことができます - 助けを(私はパンダに新しいですと設問?このコラムシリーズは、データフレーム内にある)

ありがとう!

EDIT:調整]閉じるデータを示す例、悪いの書式内の別のデータフレームからのデータフレームの列を作成全く問題があります

Date    Open  High   Low  Close Adj Close                   
2017-01-03 225.039993 225.830002 223.880005 225.240005 222.073914 
2017-01-04 225.619995 226.750000 225.610001 226.580002 223.395081 
2017-01-05 226.270004 226.580002 225.479996 226.399994 223.217606 
2017-01-06 226.529999 227.750000 225.899994 227.210007 224.016220 
2017-01-09 226.910004 227.070007 226.419998 226.460007 223.276779 
2017-01-10 226.479996 227.449997 226.009995 226.460007 223.276779 
+0

サンプルデータがありますか? 'DataFrame.evm'メソッドの最初の引数としてSeriesを渡しているようです。 –

答えて

0

私にはdf['ideal_moving_average']を渡そうとしたときに起きていたspanが複数の値を取ることができなかったという疑問がある人にとっては、代わりに、次のコードを使用しました。このコードは、その行の値をspanに渡す行単位で表示されていたようです。

df['30ema'] = df['Adj Close'].ewm(span=df.iloc[-1]['ideal_ma'], min_periods=0, ignore_na=True).mean() 

EDIT:誰かがそれが動作しないか、助けのためのより良い何か、感謝を作成できることを示してまで、私は、今のところ、これが正しいと受け入れます。

0

。一般的に

あなたが受信しているエラーは、あなたがそのようななどandornotなどの論理fonctionsでシリーズを比較しようとすると、このエラーが返され、完全に異なっている...

、このエラーあなたを避けるために、たとえば、andの代わりに&、またはnotの代わりに~を使用するか、numpyを使用して要素を比較する必要があります。

ここで問題は、emaのスパンとしてSerieを使用しようとしていることです.pandas ewma関数は、整数をスパンとして受け入れます。

たとえば、可能な期間ごとにemaを計算してから、データフレームのema ideal列として設定したSerieで再グループ化することができます。

1

私はこのような何かがあなたのために働くだろうと思う:

df['ema_ideal'] = df.apply(lambda x: df['Adj Close'].ewm(span=x['ideal_moving_average'], min_periods=0, ignore_na=True).mean(), axis=1) 

DataFrame.applyaxis=1の提供は、あなたが必要とする賢明のようなデータ行にアクセスすることができます。

+0

'axis = 1'と' lambda'は正確に何をするのですか?また、このコマンドが正しく動作するかどうかは不明ですが、移動平均は 'span = 30'で作成された別のewmよりも低いです。また、 'df ['ema_ideal']'はEWMの[ NaN

+0

更新された答えを参照してください。「Mean」は括弧が抜けていたので、Meanで計算される値ではなくメソッド自体が返されていました。 'lambda'と' axis = 1'については、こちらをご覧ください:https://pandas.pydata.org/pandas-docs/stable/basics.html#row-または-columnwise-function-アプリケーション –

+0

hmm、このエラーを受け取っても、このエラーを受け取りません:ValueError:渡された項目の数が間違っています207、配置は1を意味します、FYI 'df ['ideal_moving_average']'は207行です – NaN

関連する問題