When calculating a new column in a DataFrame, if you want to use the value of column if it is not Null, or fall back on the value of another column, you can do it with a one-liner.
# Import libraries
import pandas as pd
import numpy as np
# Create a sample DataFrame
df = pd.DataFrame(np.random.random(size=(10, 2)), columns=list('AB')).round(3)
df.iloc[[2,3,5,8], 0] = np.nan
df
A | B | |
0 | 0.591 | 0.394 |
1 | 0.573 | 0.374 |
2 | NaN | 0.309 |
3 | NaN | 0.254 |
4 | 0.231 | 0.230 |
5 | NaN | 0.099 |
6 | 0.392 | 0.703 |
7 | 0.447 | 0.496 |
8 | NaN | 0.058 |
9 | 0.597 | 0.658 |
Here is the code:
# Create a third column, that will take column A value if not Null
# or fall back on B
df['C'] = df['A'].fillna(df['B'])
df
A | B | C | |
0 | 0.591 | 0.394 | 0.591 |
1 | 0.573 | 0.374 | 0.573 |
2 | NaN | 0.309 | 0.309 |
3 | NaN | 0.254 | 0.254 |
4 | 0.231 | 0.230 | 0.231 |
5 | NaN | 0.099 | 0.099 |
6 | 0.392 | 0.703 | 0.392 |
7 | 0.447 | 0.496 | 0.447 |
8 | NaN | 0.058 | 0.058 |
9 | 0.597 | 0.658 | 0.597 |
You can even chain it, to get a third column value, if the first two columns are Null:
# Add some data
df['C'] = np.random.random(size=(10, 1)).round(3)
df.iloc[[1,4,5,8], 1] = np.nan
# Create a fourth column, that would take column C value
# if the first two are Null
df['D'] = df['A'].fillna(df['B']).fillna(df['C'])
df
A | B | C | D | |
0 | 0.591 | 0.394 | 0.637 | 0.591 |
1 | 0.573 | NaN | 0.331 | 0.573 |
2 | NaN | 0.309 | 0.738 | 0.309 |
3 | NaN | 0.254 | 0.856 | 0.254 |
4 | 0.231 | NaN | 0.160 | 0.231 |
5 | NaN | NaN | 0.926 | 0.926 |
6 | 0.392 | 0.703 | 0.847 | 0.392 |
7 | 0.447 | 0.496 | 0.824 | 0.447 |
8 | NaN | NaN | 0.529 | 0.529 |
9 | 0.597 | 0.658 | 0.948 | 0.597 |