'How to replace values in column when other column is not nan or replace with other?

I am new to Pandas, I am looking for solution where I can replace one column values with other columns. For eg:

Replace value of col A with the values in Col E if the values are Nan in colE, Replace with the value of ColD if not nan, else replace with the values of ColC. Can anyone please help?



Solution 1:[1]

You can use .fillna for that, which basically means "use original value if it exists, otherwise use the fill value".

So, your example should look something like this:

df_merged = df.assign(A=df['A'].fillna(df['E']).fillna(df['D']).fillna(df['C'])

Solution 2:[2]

What you describe looks a lot like bfill:

df = pd.DataFrame({'A': [1, None, None, None, None],
                   'B': [2, 3, None, None, None],
                   'C': [4, 5, 6, 7, None],
                   'D': [8, 9, 10, None, None],
                   'E': [11, 12, None, None, None]
                  })
#      A    B    C     D     E
# 0  2.0  2.0  4.0   8.0  11.0
# 1  3.0  3.0  5.0   9.0  12.0
# 2  6.0  NaN  6.0  10.0   NaN
# 3  7.0  NaN  7.0   NaN   NaN
# 4  NaN  NaN  NaN   NaN   NaN


order = ['A', 'E', 'D', 'C']
df['A'] = df[order].bfill(axis=1)['A']

#       A    B    C     D     E
# 0   1.0  2.0  4.0   8.0  11.0
# 1  12.0  3.0  5.0   9.0  12.0
# 2  10.0  NaN  6.0  10.0   NaN
# 3   7.0  NaN  7.0   NaN   NaN
# 4   NaN  NaN  NaN   NaN   NaN

or if you really want to replace all values of A (even the non-NaN):

order = ['E', 'D', 'C']
df['A'] = df[order].bfill(axis=1)['E']

#       A    B    C     D     E
# 0  11.0  2.0  4.0   8.0  11.0
# 1  12.0  3.0  5.0   9.0  12.0
# 2  10.0  NaN  6.0  10.0   NaN
# 3   7.0  NaN  7.0   NaN   NaN
# 4   NaN  NaN  NaN   NaN   NaN

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Elias Mi
Solution 2