根据条件删除 pandas 分组

6
我有一个包含多个分组的 Pandas 数据框,我想排除某些分组(特定列中)不满足条件的情况。例如,在“crit1”列中存在非数字值的话,删除B组。
我可以根据条件删除特定的列: 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
1个回答

11

你可以使用 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()中的一个? - Don
是的。您可以在lambda函数中指定列,请查看更新后的答案。 - Psidom
好的,这正是我想象中的,但我还是太新了,无法自己找到它,非常感谢! - Don

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接