【毎日Python】Pythonでデータフレームの条件に応じて値を変更する方法|mask,where

mask
毎日Python/こつこつPython
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': ['a', 'a', 'b', 'b', 'a'],
    'col2': [2, 13, 5, 8, 20],
    'col3': [6, np.NaN, np.NaN, 12, 9]})
df

データフレームで、条件に一致する場合にだけ値を変更する方法です。
使用するのは、pandas.DataFrameのmaskメソッドです。
このようなデータフレームを用意します。

df['col2'].mask(df['col2']>5, 'Z')

第一引数に条件を指定します。
第二引数には、条件に合う場合に代入する値を指定します。
実行します。
条件に合う値が置き換わりました。

df['col3'].mask(df['col3'].isnull(), df['col2'])

null値を補完することもできます。
col3のNull値をcol2の値にしてみましょう。
実行します。
行1と2のNull値が置き換わりました。

df['col3'].mask(df['col3'].isnull(), df['col2'], inplace=True)

なお、元のデータフレームはそのままです。
元のデータフレームを置き換えたい場合は、引数inplaceにTrueを渡します。

df['col2'].where(df['col2']>5, 'Z')

また、似ているメソッドにwhereがあります。
こちらは、maskメソッドとは逆で、条件に合わない値のみ操作することができます。
実行します。
先ほどのmaskの結果と逆になりました。

関連メソッド

【毎日Python】Pythonでデータフレームの欠損値を置換する方法|fillna

【毎日Python】Pythonでデータフレームの欠損値を確認する方法|isnull

毎日Python】Pythonでデータフレームの要素を置換する方法|replace