pandas 组标准

pandas criterias for groups

我正在为 pandas 分组而苦苦挣扎,这可能很容易解决。 例如

name  number
A    10
A    8

B    7
B    6
B    9

在这个数据集中,最简单的向量化方法是什么,我可以用它排除类别(列)"name" 的所有行项目,其中 "number" 的最小值低于 8。 上面所有的 B 都会被删除,因为至少有一个元素的值小于 8。

我相信 groupbyapplyfilter 一定是可能的,但不记得了。

使用filter

In [3281]: df.groupby('name').filter(lambda x: x['number'].min() >= 8)
Out[3281]:
  name  number
0    A      10
1    A       8

详情

In [3282]: df
Out[3282]:
  name  number
0    A      10
1    A       8
2    B       7
3    B       6
4    B       9

您可以使用 transform with min for mask and boolean indexing 作为过滤器:

print (df.groupby('name')['number'].transform('min') >=8)
0     True
1     True
2    False
3    False
4    False
Name: number, dtype: bool

df = df[df.groupby('name')['number'].transform('min') >=8]
print (df)
  name  number
0    A      10
1    A       8

这也可以用 apply 完成(为了完整起见)。

mask = df.groupby('name')['number'].apply(lambda x : (x>=8).all())
# or Thanks @Zero mask = df.groupby('name')['number'].min() >= 8
df[df['name'].isin(mask[mask].index)]

输出:

  name  number
0    A      10
1    A       8