Pandas, conditional column assignment based on column values

How can I get conditional assignment in pandas based on the values ​​of two columns? Conceptually, something like the following:

Column_D = Column_B / (Column_B + Column_C) if Column_C is not null else Column_C

Specific example:

import pandas as pd
import numpy as np
df = pd.DataFrame({'b': [2,np.nan,4,2,np.nan], 'c':[np.nan,1,2,np.nan,np.nan]})


     b    c
0  2.0  NaN
1  NaN  1.0
2  4.0  2.0
3  2.0  NaN
4  NaN  NaN

I want to have a new column d, the result of which is to divide the column bby the sum band c, if cnot null, otherwise the value should be the value in the column c. Something conceptually looks like this:

df['d'] = df['b']/(df['b']+df['c']) if not df['c'].isnull() else df['c']

desired result:

     b    c         d
0  2.0  NaN       NaN
1  NaN  1.0       1.0
2  4.0  2.0       0.66
3  2.0  NaN       NaN
4  NaN  NaN       NaN

How can i achieve this?

+4
source share
1 answer

try this (if you want your desired result set to be a column check b):

In [30]: df['d'] = np.where(df.b.notnull(), df.b/(df.b+df.c), df.c)

In [31]: df
Out[31]:
     b    c         d
0  2.0  NaN       NaN
1  NaN  1.0  1.000000
2  4.0  2.0  0.666667
3  2.0  NaN       NaN
4  NaN  NaN       NaN

, c:

In [32]: df['d'] = np.where(df.c.notnull(), df.b/(df.b+df.c), df.c)

In [33]: df
Out[33]:
     b    c         d
0  2.0  NaN       NaN
1  NaN  1.0       NaN
2  4.0  2.0  0.666667
3  2.0  NaN       NaN
4  NaN  NaN       NaN
+6

Source: https://habr.com/ru/post/1649448/


All Articles