kyle1009
kyle1009

Reputation: 107

How add a value in a new column in a dataframe?

I have to consider values of two different column of a dataframe. Calculate them with a multiplication and then a division and put results in a new column. I write this, but it doesn't 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 output:

   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 output:

   number1   number2      total number
0    400       90            40,5
1    35,5      50            17,75  
2    678       3,4           23,05

Upvotes: 4

Views: 91

Answers (3)

Diego Mora Cespedes
Diego Mora Cespedes

Reputation: 3862

If you are doing simple math, you don't need any special functions. The calculations between columns will be vectorised by default:

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

Output:

enter image description here

Upvotes: 1

jezrael
jezrael

Reputation: 862396

I think you need first replace , to . and then cast to 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

Also is possible use mul with 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

If values in columns number1 or number2 contains some NaN is possible use parameter 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

Upvotes: 2

piRSquared
piRSquared

Reputation: 294198

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

Upvotes: 3

Related Questions