2016-08-18 147 views
2

我有一个熊猫数据框与几个群组,我想排除某些条件(特定列)未满足的群组。例如。在这里删除组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

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

如果谓词仅适用于一列,可以通过访问列,例如:

df.groupby('name').filter(lambda g: (g.crit1 != np.inf).all()) 
# name crit1 crit2 
# 0 A  0.3  4 
# 1 A  0.7  6 
+0

首先非常感谢您的快速回复!如果我只想将过滤应用到一个特定的列(因为在别人中我不关心'inf'..),我必须调整.all()吗? – Don

+0

是的。您可以在lambda函数中指定该列,查看已更新的答案。 – Psidom

+0

好的,这就是我的想象,但是我仍然对Python自己太陌生以至于无法自己找到它,非常感谢! – Don