【问题标题】:Delete pandas group based on condition根据条件删除熊猫组
【发布时间】:2016-12-25 10:43:13
【问题描述】:

我有一个包含多个组的 pandas 数据框,我想排除不满足某些条件(在特定列中)的组。例如。在此处删除组 B,因为它们在“crit1”列中具有非数字值。

我可以根据条件df.loc[:, (df >< 0).any(axis=0)] 删除特定列,但不会删除整个组。

不知何故,我无法进行下一步并将其应用于整个团队。

name    crit1   crit2
A       0.3     4
A       0.7     6
B       inf     4
B       0.4     3 

所以这个过滤后的结果(只允许浮动)应该是:

A     0.3     4
A     0.7     6

【问题讨论】:

    标签: python pandas filter


    【解决方案1】:

    您可以使用groupbyfilter,对于您给出的示例,您可以检查np.inf 是否存在于组中,filter 是否存在:

    import pandas as pd
    import numpy as np
    df.groupby('name').filter(lambda g: (g != np.inf).all().all())
    #   name   crit1    crit2
    # 0    A     0.3        4
    # 1    A     0.7        6
    

    如果谓词只适用于一列,则可以通过g.访问该列,例如:

    df.groupby('name').filter(lambda g: (g.crit1 != np.inf).all())
    #   name   crit1    crit2
    # 0    A     0.3        4
    # 1    A     0.7        6
    

    【讨论】:

    • 首先非常感谢您的快速回复!如果我只想将过滤应用于一个特定的列(因为在其他列中我不关心'inf'..),我是否必须调整 .all() ?
    • 是的。您可以在 lambda 函数中指定列,查看更新后的答案。
    • 好的,这就是我的想象,但是我还是对python太陌生了,自己找不到它,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2017-10-04
    • 2015-10-15
    相关资源
    最近更新 更多