根据条件

时间:2016-08-18 13:16:03

标签: python pandas filter

我有几个组的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

1 个答案:

答案 0 :(得分: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