【问题标题】:How to concatenate float to list?如何将浮点数连接到列表?
【发布时间】:2021-06-02 21:05:26
【问题描述】:

我有一个如下图所示的数据框

import pandas as pd
z = pd.DataFrame({'Unit':['%','%','%','mmol/mol','mmol/mol'],'value':[6,1,5,120,110]})

我想创建一个名为new_value 的新列,它的值基于Unit 列。意思是,如果unit%,我们就保持不变。如果不是这样,我们应该应用下面的公式来转换它们

% = [0.09148 * value] + 2.152). 

因此,我尝试了以下代码

z['new_value'] = np.where(z["Unit"]=='mmol/mol', z['value'],([0.09148*z['value']] + 2.152))

但它导致了如下所示的错误消息

TypeError: can only concatenate list (not "float") to list

我希望我的输出如下所示

【问题讨论】:

    标签: python pandas list dataframe conditional-statements


    【解决方案1】:

    另一种方法:

    z["new_value"] = z["value"]
    mask = z['Unit'] != '%', "new_value"
    z.loc[mask] = z.loc[mask] * 0.09148 + 2.152
    
           Unit  value  new_value
    0         %      6     6.0000
    1         %      1     1.0000
    2         %      5     5.0000
    3  mmol/mol    120    13.1296
    4  mmol/mol    110    12.2148
    
    

    【讨论】:

      【解决方案2】:

      删除[] 以从np.where 的第二部分(其他)返回一维数组,同时更改顺序then-else

      z['new_value'] = np.where(z["Unit"]=='mmol/mol', 0.09148*z['value'] + 2.152, z['value'])
      print (z)
             Unit  value  new_value
      0         %      6     6.0000
      1         %      1     1.0000
      2         %      5     5.0000
      3  mmol/mol    120    13.1296
      4  mmol/mol    110    12.2148
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多