python - 有条件地将 pandas 数据框中的值替换为计算值

标签 python pandas dataframe

我正在努力解决以下问题。我有一个具有浓度值的数据框,该浓度值可能低于检测限(在本例中<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/

相关文章:

python - Airflow - params 内的 Jinja 模板(postgresoperator)

python - 根据不同列中值的交集查找相似组

python - 在 python 中的 pandas 中匹配数据帧之间的行

r - 在拥有 `melt` 之前必须先对其进行 `cast` 数据帧吗?

python - 如果另一列中的值匹配,如何填充列中的 nan 值

python - 记录 zmq 套接字实例发送/接收?

Python virtualenv --system-site-packages -- 意外的 pip 行为

python - 用python重采样和合并数据框

python - Pandas - 替换 for 循环以提高效率

python - 如何在Python中创建一个时间范围?