如果没有小数将无限值替换为0
,然后替换为缺失值:
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
带小数的解决方案:
如果可能,将其转换为整数:
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
如果不是,则将0
替换为1
,如果至少有一列中的值为0
,则将其设置为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