A と B の 2 つの列を持つ pandas DataFrame があるとします。この DataFrame を変更 (またはコピーを作成) して、A が 0 の場合は常に B が NaN になるようにしたいと思います。どうすれば実現できるでしょうか?
私は次のことを試しました
df['A'==0]['B'] = np.nan
そして
df['A'==0]['B'].values.fill(np.nan)
成功しませんでした。
ベストアンサー1
使用.loc
ラベルベースのインデックスの場合:
df.loc[df.A==0, 'B'] = np.nan
このdf.A==0
式は、行にインデックスを付け、'B'
列を選択するブール シリーズを作成します。また、これを使用して列のサブセットを変換することもできます。例:
df.loc[df.A==0, 'B'] = df.loc[df.A==0, 'B'] / 2
私はパンダの内部構造について十分に理解していないので、なぜそれが機能するのか正確にはわかりませんが、基本的な問題は、データフレームにインデックスを付けると、結果のコピーが返されることもあれば、元のオブジェクトのビューが返されることもあるということです。ドキュメントによるとこここの動作は、基礎となる numpy の動作に依存します。設定の場合は、すべてに 1 回の操作でアクセスする ([1][2] ではなく) 方がうまくいく可能性が高いことがわかりました。