根据条件删除熊猫组

Don*_*Don 6 python filter pandas

我有一个包含多个组的 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 
Run Code Online (Sandbox Code Playgroud)

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

A     0.3     4
A     0.7     6
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 8

您可以使用groupbyand 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
Run Code Online (Sandbox Code Playgroud)

如果谓词仅适用于一列,则可以通过 访问该列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
Run Code Online (Sandbox Code Playgroud)