Python 根据条件删除熊猫组
我有一个包含多个组的pandas数据框架,我想排除一些不满足某些条件(在特定列中)的组。例如,此处删除B组,因为“crit1”列中有非数字值 我可以根据条件Python 根据条件删除熊猫组,python,pandas,filter,Python,Pandas,Filter,我有一个包含多个组的pandas数据框架,我想排除一些不满足某些条件(在特定列中)的组。例如,此处删除B组,因为“crit1”列中有非数字值 我可以根据条件df.loc[:,(df>
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
您可以使用
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
首先非常感谢您的快速回复!如果我只想将筛选应用于一个特定列(因为在其他列中我不关心'inf'…),我必须调整.all()的值吗?是的。您可以在lambda函数中指定列,请参见更新的答案。好的,这是我想象的,但是我对python还是太陌生了,自己找不到它,非常感谢!