查找超过最小值或最大值的值

时间:2020-05-24 05:39:21

标签: python pandas

我正在尝试。我的数据框看起来与此类似:

Name    DateTime    Na  Na Err  Mg  Mg Err  Al  Al Err  Si  Si Err
STD1    2/11/2020   0.3 0.11    1.6 0.08    0.6 0.12    21.5    0.14
STD2    2/11/2020   0.2 0.10    1.6 0.08    0.2 0.12    21.6    0.14
STD3    2/11/2020   0.2 0.10    1.6 0.08    0.5 0.12    21.7    0.14
STD4    2/11/2020   0.1 0.10    1.3 0.08    0.5 0.12    21.4    0.14

这就是我所拥有的:

elements=['Na','Mg', 'Al', 'Si',...]
quant=df[elements].quantile([lower, upper]) #obtain upper/lower limits
outsideBounds=(quant.loc[lower_bound, elements] < df[elements].to_numpy()) \
& (df[elements].to_numpy()<quant.loc[lower_bound, elements])

但是,这给了我一个“ ValueError:长度必须匹配才能进行比较”。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

这是一个解决方案(我分别为上下限选择了0.3和0.7,但是当然可以更改):

lower = 0.3
upper = 0.7
elements=['Na','Mg', 'Al', 'Si']
df[elements]
bounds = df[elements].quantile([lower, upper]) #obtain upper/lower limits
out_of_bounds = df[elements].lt(bounds.loc[lower, :]) | df[elements].gt(bounds.loc[upper, :])
df[elements][out_of_bounds]

生成的bounds是:

       Na    Mg    Al     Si
0.3  0.19  1.57  0.47  21.49
0.7  0.21  1.60  0.51  21.61

df[elements][out_of_bounds]的结果是:

    Na   Mg   Al    Si
0  0.3  NaN  0.6   NaN
1  NaN  NaN  0.2   NaN
2  NaN  NaN  NaN  21.7
3  0.1  1.3  NaN  21.4
相关问题