это должно сработать
import pandas as pd
df = pd.DataFrame({
'GType': ['CAT1', 'CAT3', 'CAT3', 'CAT2'],
'BNM': ['WERT', 'FRGT', None, None],
'XXCV': [None, None, None, None],
'COO': [None, None, None, None],
})
to_nan_xxcv = (df.XXCV.isnull()) & (df.GType.isin(['CAT1', 'CAT2']))
to_nan_rest = (df.COO.isnull() | df.BNM.isnull())
df.loc[to_nan_xxcv, 'XXCV'] = df.loc[to_nan_xxcv, 'XXCV'].fillna('')
df.loc[to_nan_rest, ('COO', 'BNM')] = df.loc[to_nan_rest, ('COO', 'BNM')].fillna('')
print(df)
to_nan_xxcv
отфильтрует только то, что вы хотите, а остальное заменит независимо на GType
, что, очевидно, то, что вы хотели, исходя из желаемого результата,Также вы можете заменить на vvv
, позвонив .fillna('vvv')