Reputation: 107
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
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:
Upvotes: 1
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
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
Upvotes: 3