numpyとpandasのwhere
の挙動が反するように感じたので、共有します。
条件に応じて値を代入するメソッドにwhere
とmask
があります。
メソッドの詳細はこちらにございます。
(いつもお世話になっております)
以下に適当な例を出してみます。
import numpy as np
import pandas as py
test = np.array([1,2,3])
この2
を200
に置換したいとします。
np.where
でやってみましょう。
>>> pd.Series(np.where(test == 2, 200, test))
0 1
1 200
2 3
dtype: int64
目的の結果が得られます。
では、pd.where
では?
>>> pd.Series(test).where(test == 2, 200)
0 200
1 2
2 200
dtype: int64
残念です。目的とは逆の結果になりました…
np.where
の代わりにはpd.mask
を使いましょう。
>>> pd.Series(np.where(test == 2, 200, test))
0 1
1 200
2 3
dtype: int64
np.where
との挙動を合わせてほしいですね…