使用计算值有条件地替换pandas数据帧中的值

时间:2017-12-19 16:00:13

标签: python pandas dataframe

我正在努力解决以下问题。我有一个数据框,其浓度值可能低于检测限(在本例中<100或<200)

df2 = DataFrame({"site":['site1','site2','site3','site4'],
                 "concentration":[12000,2000,'<100','<200']})

为了绘制值,我想用0.5 x检测限值替换值<100。所以&lt; 100变成50; &lt; 200变成了。 然后代码应该添加一列TPH&lt;指出哪些站点低于检测限。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:2)

创建一个掩码,以查找包含<,索引为loc和更新 -

的元素
m = df2.concentration.astype(str).str.contains('<')
df2.loc[m, 'concentration'] = \
      pd.to_numeric(df2.loc[m, 'concentration'].str.lstrip('<'), errors='coerce') / 2

df2

  concentration   site
0         12000  site1
1          2000  site2
2            50  site3
3           100  site4

此外,m记录检测限以下的行。

m

0    False
1    False
2     True
3     True
Name: concentration, dtype: bool

将其分配给df2 -

df2['TPH<'] = m
df2

  concentration   site   TPH<
0         12000  site1  False
1          2000  site2  False
2            50  site3   True
3           100  site4   True

请记住concentration是一个对象列。我建议转换为数字 -

df2.concentration = df2.astype(float)

或者,

df2.concentration = pd.to_numeric(df2.concentration, errors='coerce')