タイムスタンプdatetimeインデックスと各日付に対応する値を持つpandas DataFrameがあります。例えば、df = pd.DataFrame(['0.11', '0.07', '0.04', '-0.11', '-0.04', '0.08', '0.1'], index=['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05', '2017-01-06', '2017-01-07'], columns=['values'])
。パンダの時系列データフレームにおける論理要素単位の操作
上記のデータフレームの現在および過去の値に基づいて、追加の列('new_value'
と呼ぶ)を作成したいとします。
ロジックがなければならない:
- 値より大きい又は0.1に等しい場合、 'NEW_VALUE' が-1に を設定する必要があり、
- 'NEW_VALUE' が-1に設定されると、それは残るべき-1値 登録されている0.05以下になるまで、
- の値は、「NEW_VALUE」は +1に設定する必要が-0.1以下である場合、
- 「NEW_VALUE回'が+1に設定されている場合、値が+1になるまで+1する必要があります
- 、登録されている以上-0.05に等しい そうでない場合は「NEW_VALUEが」0
に等しい私は、複数の解決策を試してみましたが、この問題を解決するように見えることはできません。私は3番目の行を次のように変更した場合'ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().'
:'ValueError: can only convert an array of size 1 to a Python scalar'
によって与えられたと仮定すると、あなたに感謝します。私の理解を構築する上で、私の元のアプローチがうまくいかない理由を誰もが説明できますか? –
@Panda_User参照してください[***この回答は***](http://stackoverflow.com/a/43222675/2336654)それは役に立った:-) – piRSquared
@Panda_User私はあなたがつかまったことがわかります最初の段階で...はい、私があなたに与えたことは、ベクトル化された解決策です。あなたはループを使う道を辿っていた。今はあなたがする必要はありません。多くの人々が、ループを実行するときにシリーズをブール値として評価するという罠に陥ります。 – piRSquared