2016-11-16 37 views
4

我必須考慮數據框的兩個不同列的值。用乘法計算它們,然後分割並將結果放在新列中。我寫這篇文章,但它不工作:如何在數據框的新列中添加值?

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() 

這是我的輸出:

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

相反,我想這樣的輸出:

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

你能添加輸入列之間的計算將默認矢量化? – jezrael

+0

對不起,但我不明白。你建議添加結果作爲輸入? – kyle1009

+0

對不起,意思是'但它不工作'?數據中有些「NaN」?如果是,那麼期望的輸出是什麼? – jezrael

回答

2

我想你需要先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 

也可以使用muldiv

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 

如果列number1number2值包含了一些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 
3
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

1

如果你正在做簡單的數學,你不需要任何特殊的功能。

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

輸出:

enter image description here

相關問題