0

I have a table:

        df = pd.DataFrame([[0.1, 2, 55, 0,np.nan],
               [0.2, 4, np.nan, 1,99],
               [0.6, np.nan, 22, 5,88],
               [1.4, np.nan, np.nan, 4,77]],
               columns=list('ABCDE'))

    A    B     C  D     E
0  0.1  2.0  55.0  0   NaN
1  0.2  NaN   NaN  1  99.0
2  0.6  NaN  22.0  5  88.0
3  1.4  NaN   NaN  4  77.0

I want to replace NaN values in Column B based on condition on Column A. Example:

When  B is NULL and value in `column A > 0.2 and < 0.6` replace "NaN" in column B as 5
When B is NULL value in `column A > 0.6 and < 2` replace "NaN" in column B as 10

I tried something like this:

   if df["A"]>=val1 and pd.isnull(df['B']):
       df["B"]=5
  elif df["A"]>=val2 and df["A"]<val3 and pd.isnull(df['B']):
       df["B"]=10
  elif df["A"]<val4 and pd.isnull(df['B']):
       df["B"]=15

The above code is not working.

Please let me know is there any other alternative approach using for loop or apply functions to iterate over pandas dataframe.

Shubham Bajaj
  • 309
  • 1
  • 3
  • 12

1 Answers1

1

You can use mask:

df['B'] = df['B'].mask((df['A']>0.2) & (df['A']<0.6), df['B'].fillna(5))
df['B'] = df['B'].mask((df['A']>0.6) & (df['A']<2), df['B'].fillna(10))

or you can try np.where but it will involve a long condition I guess.

Akash Kumar
  • 1,356
  • 1
  • 10
  • 28