繁体   English   中英

如何在数据框的新列中添加值?

[英]How add a value in a new column in a dataframe?

我必须考虑数据帧的两个不同列的值。 使用乘法然后除法计算它们并将结果放入新列。 我写这个,但它不起作用:

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

在此输入图像描述

我觉得你首先需要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

如果您正在进行简单的数学运算,则不需要任何特殊功能。 默认情况下,列之间的计算将被矢量化:

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

输出:

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM