【问题标题】:How add a value in a new column in a dataframe?如何在数据框中的新列中添加值?
【发布时间】:2017-03-30 07:37:10
【问题描述】:

我必须考虑数据框的两个不同列的值。用乘法和除法计算它们,并将结果放在新列中。我写了这个,但它不起作用:

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

【问题讨论】:

  • 可以添加输入吗?
  • 对不起,我不明白。您建议将结果添加为输入?
  • 对不起,but it doesn't work 是什么意思?数据中有一些NaN 吗?如果是,期望的输出是什么?

标签: python database python-2.7 pandas dataframe


【解决方案1】:

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

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

输出:

【讨论】:

    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2019-08-12
        • 2020-11-08
        • 1970-01-01
        • 2022-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多