Pandas Use Value if Not Null, Else Use Value From Next Column
In [8]: dfOut[8]: COL1 COL20 A NaN1 NaN B2 A BIn [9]: df["COL3"] = df["COL1"].fillna(df["COL2"])In [10]: dfOut[10]: COL1 COL2 COL30 A NaN A1 NaN B B2 A B A
You can use np.where
to conditionally set column values.
df = df.assign(COL3=np.where(df.COL1.isnull(), df.COL2, df.COL1))>>> df COL1 COL2 COL30 A NaN A1 NaN A A2 A A A
If you don't mind mutating the values in COL2, you can update them directly to get your desired result.
df = pd.DataFrame({'COL1': ['A', np.nan,'A'], 'COL2' : [np.nan,'B','B']})>>> df COL1 COL20 A NaN1 NaN B2 A Bdf.COL2.update(df.COL1)>>> df COL1 COL20 A A1 NaN B2 A A
Using .combine_first
, which gives precedence to non-null values in the Series or DataFrame calling it:
import pandas as pdimport numpy as npdf = pd.DataFrame({'COL1': ['A', np.nan,'A'], 'COL2' : [np.nan,'B','B']})df['COL3'] = df.COL1.combine_first(df.COL2)
Output:
COL1 COL2 COL30 A NaN A1 NaN B B2 A B A