微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中,有没有一种直接的方法来过滤pddataframe条件2列的值范围?

我有一个简单的数据帧:

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] 举报,一经查实,本站将立刻删除。

相关推荐