Home > Software engineering >  How to divide on Zero in Pandas Dataframe and make 1 column out of 2
How to divide on Zero in Pandas Dataframe and make 1 column out of 2

Time:05-05

I did spend few hours on Google but was not able to find solution for my issue. I'm receiving dataframe like this:

col1         col2     col3 
2022-03-01   234       0
2022-03-01   342       67
2022-03-01   0         0
2022-03-01   0         23

I need to divide Col2 on Col3 and result should look like this:

col1         col4 
2022-03-01   0      
2022-03-01   5.1
2022-03-01   0        
2022-03-01   0 

How I can do that ?? With functions like divide or / I'm always getting error: decimal./DivizionByZero

I did try to find any solution but in Google there is always basic stuff, like divide just number on number, not on Zero etc.

Thank you,

CodePudding user response:

If no decimals replace infinite values to 0 and then missing values:

import numpy as np

df['col4'] = df['col2'].div(df['col3']).replace(np.inf,0).fillna(0)
print (df)
         col1  col2  col3      col4
0  2022-03-01   234     0  0.000000
1  2022-03-01   342    67  5.104478
2  2022-03-01     0     0  0.000000
3  2022-03-01     0    23  0.000000

Solution with decimals:

If possible convert to integers:

df['col4'] = df['col2'].astype(int).div(df['col3'].astype(int)).replace(np.inf,0).fillna(0)
print (df)
         col1 col2 col3      col4
0  2022-03-01  234    0  0.000000
1  2022-03-01  342   67  5.104478
2  2022-03-01    0    0  0.000000
3  2022-03-01    0   23  0.000000

If not, replace 0 to 1 and then set 0 if at least in one column is 0:

df['col4'] = df['col2'].div(df['col3'].replace(0, 1)).mask(df[['col2', 'col3']].eq(0).any(1), 0)
print (df)
         col1 col2 col3                           col4
0  2022-03-01  234    0                              0
1  2022-03-01  342   67  5.104477611940298507462686567
2  2022-03-01    0    0                              0
3  2022-03-01    0   23                              0
  • Related