Pandas Use Value if Not Null, Else Use Value From Next Column Pandas Use Value if Not Null, Else Use Value From Next Column python-3.x python-3.x

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