2017-12-19 15 views
1

私は以下の点で苦労しています。私は値をプロットするためにpandasデータフレームの条件付き値を計算値で置き換えます

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

(この例< 100又は< 200で)検出限界以下であることができる濃度値を有するデータフレームを持っている、私は値< 100を交換したいです検出限界の0.5倍。したがって、< 100は50になります。 < 200になります。 コードは、どのサイトが検出限界以下であるかを示す列TPH <を追加する必要があります。

すべてのヘルプは非常に

+0

を、[最も有用な答えを受け入れる]してください(https://stackoverflow.com/help/someone -answers)の横にある灰色のチェックをクリックして緑色に切り替えます。ありがとう! –

答えて

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に割り当てる - 覚えておいてくださいconcentration

df2['TPH<'] = m 
df2 

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

オブジェクト列です。私は、数値への変換をお勧めしたい - あなたの質問を答えた場合

df2.concentration = df2.astype(float) 

あるいは、

df2.concentration = pd.to_numeric(df2.concentration, errors='coerce') 
関連する問題