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

问题描述 投票:1回答:1

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

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

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

任何帮助深表感谢

python pandas dataframe
1个回答
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')
© www.soinside.com 2019 - 2024. All rights reserved.