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