我正在努力解决以下问题。我有一个具有浓度值的数据框,该浓度值可能低于检测限(在本例中<100或<200)
df2 = DataFrame({"site":['site1','site2','site3','site4'],
"concentration":[12000,2000,'<100','<200']})
为了绘制这些值,我想将 <100 的值替换为 0.5 x 检测限。所以<100变成50; <200 变为 。 然后,代码应添加一列 TPH< 以指示哪些位点低于检测限。
非常感谢任何帮助
最佳答案
创建一个掩码来查找带有 <
的元素,索引为 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')
关于python - 有条件地将 pandas 数据框中的值替换为计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890756/