floss
floss

Reputation: 2773

Pandas merge columns if 'NaN' value is present in one line code

My dataset df looks like this:

time         high      low     offset
2017-01-01   1.012     0.921    NaN
2017-01-02   1.019     0.934    NaN 
2017-01-03   1.213     NaN      0.982
2017-01-04   1.112     0.965    NaN

here, either low value is NaN or offset value is NaN but not both

I want to create a new column called low_offset_merge

so that low_offset_merge will contain the merged values of low and offset and it will all have a number value and no NaN, like below:

time         high      low     offset  low_offset_merge
2017-01-01   1.012     0.921    NaN       0.921
2017-01-02   1.019     0.934    NaN       0.934
2017-01-03   1.213     NaN      0.982     0.982
2017-01-04   1.112     0.965    NaN       0.965

What did I do?

- First, check if `low` has `NaN` values and set the value     
df.loc[df['low'] != 'NaN', 'low_offset_merge'] = df['offset']

- Second, fill in the `NaN` column
df['low_offset_merge'] = df['low_offset_merge'].fillna(value=df['offset'])

I am looking for a one-line solution, can you please help?

Upvotes: 4

Views: 2479

Answers (1)

Simon
Simon

Reputation: 10150

You were close with your last attempt using fillna. You don't need to check for NaN values first, you can just directly fill the missing values with values from another column:

df['low_offset_merge'] = df['low'].fillna(df['offset'])

Upvotes: 7

Related Questions