2017-09-03 10 views
1

私はデータフレーム値の比較に関する助けが必要です。 私はデータフレームを持っているn個rows.Iは最後の3つのCOL値は、実行中に、私はエラーの下に取得しています、以前のPythonのデータフレームの列の値を比較します

if(data["percent"].item()>data["percent"].shift().item()>data["percent"].shift(-1).item()): 

以上でなければならない場所を比較します。

if(data["persent"].item()>data["persent"].shift().item()>data["persent"].shift(-1).item()): 
    File "C:\Anaconda3\lib\site-packages\pandas\core\base.py", line 827, in item 
    return self.values.item() 
ValueError: can only convert an array of size 1 to a Python scalar 
+0

どこでも '.item()'を削除してください。 –

+0

if(data ["persent"]> data ["persent"]。シフト()> data ["persent"]シフト(-1)): ファイル "C:\ Anaconda3 \ lib \ site-packages \ pandas \ core \ generic.py "、892行、__nonzero__ 0.740581756771121 .format(self .__ class __.__ name__) ValueError:Seriesの真理値はあいまいです。 a.empty、a.bool()、a.item()、a.any()またはa.all()を使用します。 – Sunil

答えて

0

まず、それが唯一のシングルサイズの配列のために働くので、.items()を削除します。次に、あなたが

x > y > z 

しかし

x > y and y > z 

に変換され、Pythonで、あなたのifための構造を変更する必要がありますパンダの列ではないので、andオペレータは、パンダと無効です。スカラー。この目的のためにオーバーロードされたビット単位の演算子&/|/~を使用する必要があります。真/偽のベクトルのマスクで比較した結果、今

if ((data["persent"] > data["persent"].shift()) 
    & (data["persent"].shift() > data["persent"].s‌​hift(-1))).any(): 
    ... # something here 

が、ifはこれを理解することはできません。これを試してみてください。したがって、ビジネスロジックに応じて、.all()または.any()を使用して単一のスカラーブール値に減らす必要があります。

関連する問題