df
Out[102]:
0 1
0 nfp_zb 0.04325
1 ftb_zb 0.05645
2 ftb_cl 0.09055
3 cl_2 0.12865
4 ftb_gc 0.13385
5 cl_1 0.22795
6 cl_3 0.26985
7 es_3 0.37955
8 es_2 0.39450
9 zb_3 0.42170
10 es_1 0.45170
11 nfp_es 0.47190
12 zb_2 0.50130
13 nfp_cl 0.53170
14 nfp_gc 0.74260
15 gc_2 0.76640
16 gc_3 0.80915
17 zb_1 0.83010
18 gc_1 0.89795
我所要做的就是选择大于阈值a且小于阈值b的值,其中两个值范围是NON OVERLAPPING.想象一下(大于85%,小于15%).显然,这两个条件都是独立的.所以我这样做:
def filter(df):
df['filter'] = ""
df.loc[df[1] > 0.85, 'filter'] = 1
df.loc[df[1] < 0.15, 'filter'] = 1
df = df[df['filter'] == 1]
del df['filter']
return df
我得到了正确的答案:
filter(df)
Out[104]:
0 1
0 nfp_zb 0.04325
1 ftb_zb 0.05645
2 ftb_cl 0.09055
3 cl_2 0.12865
4 ftb_gc 0.13385
18 gc_1 0.89795
但是,我想知道是否有直接的方法来做到这一点,而无需创建自定义公式.也许使用groupby ….
谢谢您的帮助
解决方法:
您可以将所有条件放入.loc访问器中,由或运算符分隔:
df.loc[(df['1'] > 0.85) | (df['1'] < 0.15), :]
Out[19]:
0 1
0 nfp_zb 0.04325
1 ftb_zb 0.05645
2 ftb_cl 0.09055
3 cl_2 0.12865
4 ftb_gc 0.13385
18 gc_1 0.89795
人们在其他答案中给出的建议应该同样有效,你只需要改变不平等并使用或代替和.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。