2017-02-07 5 views
3

私は、これはパンダに働く知っている(DFがデータフレームで、opは、MULTは、float変数列です):使用パンダはインプレース

df.eval("op = op * @mult", inplace=True) 

しかし、それは可能です行のサブセット(場所)でそれを行うには?これは、(ex_dateはtimestamp型のローカル変数であり、DFのインデックスは、タイムスタンプである)私にエラーを与える:

df.eval("df.loc[df.index < @ex_date, op] = op * @mult", inplace=True) 

エラーは次のとおりです。 にSyntaxError:代入の左側には、単一の名前でなければなりません

答えて

2

現在のところ、条件付き評価を行うことはできません。このための優れた機能要求があります。それはevalの()の使用cases--の非常に増加範囲を可能にするよう、私は間違いなく、この変更に賛成しています

df.eval("op = op * @mult if index < @ex_date else op", inplace=True) 

SOURCE

+0

ありがとう:提案構文はあなたの例のようなものを探してを持っているでしょう大規模なデータフレームではeval()ははるかに高速です。提案された構文は、(パフォーマンスが他のものと同じかそれ以上の場合)良好であるように見えます。 – techvslife

関連する問題