2016-05-17 4 views
0

私はパンダを使ってデータを分析しようとしていましたが、バージョン0.15.0から0.18.1にアップデートした後に問題が発生しました。パンダバリューエラー:機能が低下しない

「等価」の値が1(ここでは0または1の値しか取ることができません)の勤務期間の数を計算します。私がfollowinラムダ関数を定義し、次のようにGROUPBYコマンドを使用:

import pandas as pd 
    E = lambda x: np.sum(x.diff()==1) + x.head(1) 

    grouped = df.groupby(['run_']) 
    agg_data = grouped[['equality','avg_payoff']].mean() 
    agg_data['E'] = grouped.equality.agg(E) # number of "equality" epochs 

が、コードの最後の行のエラーメッセージを受信:

ValueError: Function does not reduce 

このコードは、更新前に完全に実行されたことを奇妙です。科学計算パッケージの更新後に問題が発生したのは今回が初めてではないので、私は少し不満を感じます。または、古いバージョンにロールバックする必要があります...

+0

のような愚かな回避策は、あなたが私たちを複製することができますで作業しているデータの一部を示す気だろうことができますか? – Stefan

答えて

1

x.head(1)はシリーズを返します。 あなたはこの

E = lambda x: np.sum(x.diff()==1) + np.sum(x.head(1)) 

または少し賢く

E = lambda x: np.sum(x.diff()==1) + x.iloc[0] 
+0

またはx.head()。値は、外部メソッドへの呼び出しを保存し、おそらくその操作に最適化されています。 – Chris

+0

@Chris x.iloc [0]よりx.head()。値が有効ですか? – knagaev

+0

パンダの親クラスであるNDFrameのソースhttps://github.com/pydata/pandas/blob/master/pandas/core/generic.pyでは、.valuesはpandasで使用される内部配列を返します。 df._data)。この場合、違いは明らかに重要ではありませんが、ilocは、すでに操作したデータを.valuesがコピーするだけなので、一般的にオーバーヘッドが大きくなります。 – Chris

関連する問題