パンダデータフレームの行のサブセットを変更する 質問する

パンダデータフレームの行のサブセットを変更する 質問する

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] ではなく) 方がうまくいく可能性が高いことがわかりました。

おすすめ記事