【问题标题】:Special filter pandas dataframe特殊过滤器熊猫数据框
【发布时间】:2019-08-09 19:19:21
【问题描述】:

我有一个数据框:

   BPR_free_speed  BPR_speed  Volume  time_normalised  free_capacity  
0           17.88  15.913662     580         1.593750          475.0  
1           17.88  15.865198     588         2.041667          475.0  
2           17.88  16.511613     475         0.666667          475.0  
3           17.88  16.882837     401         1.091458          467.0  
4           99999  16.703004     438         1.479167          467.0  
5           17.88  16.553928     467         0.960417          467.0  

如何在特殊情况下获得系列? 我想找出异常值并将它们放在系列df["has_outliers"] 中,例如如果一行在任何列中的值大于 550,则为 True,否则为 False。

这个数据框的输出应该是

     has_outliers
0           True
1           True
2           False 
3           False 
4           True 
5           False 

我认为即使使用 numpy 也可以完成,但是怎么做呢?

【问题讨论】:

    标签: python pandas numpy dataframe series


    【解决方案1】:

    比较DataFrame.gt 和DataFrame.any 以检查每行至少一个True:

    df["has_outliers"] = df.gt(500).any(axis=1)
    

    或计数Trues 并转换为整数:

    df["has_outliers"] = df.gt(500).sum(axis=1).astype(bool)
    

    【讨论】:

    • 感谢您这么快的答复!是否有可能获得反向标签? (假而不是真,反之亦然)
    • @cicaduze - 当然,使用df["has_outliers"] = ~df.gt(500).any(axis=1) - 添加~ 用于逆条件
    • 对不起,我不能为您的评论投票,但非常感谢您。你是有史以来最节省时间的人!
    • @cicaduze - 如果我的回答有帮助,请不要忘记accept。谢谢。
    猜你喜欢
    • 2018-02-05
    • 2019-04-13
    • 2015-05-28
    • 2018-02-06
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多