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)
您可以使用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)