How to add a value to a new column in a data frame?

I need to consider the values ​​of two different columns of a data frame. Calculate them with multiplication and then division and put the results in a new column. I am writing this, but this does not work:

for x in range(len(df1)):
    if df1.iloc[x,4] is not 'NaN':
            number1=float(df1.iloc[x,4])
            if df1.iloc[x,8] is not 'NaN':
                number2=float(df1.iloc[x,8])
                total=((number1*number2)/100)
                df1['total number']=total
df1.head()

this is my conclusion:

   number1   number2      total number
0    400       90            100,0
1    35,5      50            100,0  
2    678       3,4           100,0

Instead, I would like this conclusion:

   number1   number2      total number
0    400       90            40,5
1    35,5      50            17,75  
2    678       3,4           23,05
+4
source share
3 answers
df = pd.DataFrame(dict(number1=[400, 35.5, 678], number2=[90, 50, 3.4]))
df['total number'] = df.number1.mul(df.number2).div(100)
df

enter image description here

+3
source

It seems to me that you need to first do , and then apply to :replace ,.float

df['total number'] = df.number1.str.replace(',','.').astype(float) * 
                     df.number2.str.replace(',','.').astype(float) / 100
print (df)
  number1 number2  total number
0     400      90       360.000
1    35,5      50        17.750
2     678     3,4        23.052

It is also possible to use mulwith div:

df.number1 = df.number1.str.replace(',','.').astype(float)
df.number2 = df.number2.str.replace(',','.').astype(float)
print (df)
   number1  number2
0    400.0     90.0
1     35.5     50.0
2    678.0      3.4

df['total number'] = df.number1.mul(df.number2).div(100)
print (df)
   number1  number2  total number
0    400.0     90.0       360.000
1     35.5     50.0        17.750
2    678.0      3.4        23.052

number1 number2 NaN, fill_value:

print (df)
  number1 number2
0     400      90
1    35,5      50
2     678     3,4
3     NaN     5.2

df.number1 = df.number1.str.replace(',','.').astype(float)
df.number2 = df.number2.str.replace(',','.').astype(float)
print (df)
   number1  number2
0    400.0     90.0
1     35.5     50.0
2    678.0      3.4
3      NaN      5.2

df['total number'] = df.number1.mul(df.number2, fill_value=1).div(100)
print (df)
   number1  number2  total number
0    400.0     90.0       360.000
1     35.5     50.0        17.750
2    678.0      3.4        23.052
3      NaN      5.2         0.052

df['total number'] = df.number1.mul(df.number2, fill_value=0).div(100)
print (df)
   number1  number2  total number
0    400.0     90.0       360.000
1     35.5     50.0        17.750
2    678.0      3.4        23.052
3      NaN      5.2         0.000
+2

If you do simple math, you don't need any special functions. Calculations between columns will be vectorized by default:

df = pd.DataFrame(dict(number1=[400, 35.5, 678], number2=[90, 50, 3.4]))
df['number3'] = df.number1 * df.number2 / 100

Conclusion:

enter image description here

+1
source

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


All Articles