Salih
Salih

Reputation: 719

Pandas Merge Columns with Priority

My input dataframe;

    MinA  MinB   MaxA  MaxB
0   1     2      5     7
1   1     0      8     6
2   2            15    15
3         3                   
4                      10

I want to merge "min" and "max" columns amongst themselves with priority (A columns have more priority than B columns).

If both columns are null, they should have default values, for min=0 for max=100.

Desired output is;

    MinA MinB  MaxA MaxB      Min  Max
0   1     2      5     7      1    5
1   1     0      8     6      1    8
2   2            15    15     2    15
3         3                   3    100
4                      10     0    10

Could you please help me about this?

Upvotes: 0

Views: 527

Answers (2)

aprilangel
aprilangel

Reputation: 379

Just use fillna() will be fine.

df['Min'] = df['MinA'].fillna(df['MinB']).fillna(0)
df['Max'] = df['MaxA'].fillna(df['MaxB']).fillna(100)

Upvotes: 2

Philip
Philip

Reputation: 974

This can be accomplished using mask. With your data that would look like the following:

df = pd.DataFrame({
    'MinA': [1,1,2,None,None],
    'MinB': [2,0,None,3,None],
    'MaxA': [5,8,15,None,None],
    'MaxB': [7,6,15,None,10],
})

# Create new Column, using A as the base, if it is Nan, then use B.
# Then do the same again using specified values
df['Min'] = df['MinA'].mask(pd.isna, df['MinB']).mask(pd.isna, 0)
df['Max'] = df['MaxA'].mask(pd.isna, df['MaxB']).mask(pd.isna, 100)

The above would result in the desired output:

    MinA    MinB    MaxA    MaxB    Min     Max
0   1       2       5       7       1       5
1   1       0       8       6       1       8
2   2       NaN     15      15      2       15
3   NaN     3       NaN     NaN     3       100
4   NaN     NaN     NaN     10      0       10

Upvotes: 2

Related Questions