我有几个组的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
答案 0 :(得分:1)
您可以使用groupby
和filter
,例如,您提供的示例可以检查组中是否存在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