大熊猫的群体标准

时间:2017-09-24 14:39:02

标签: python pandas pandas-groupby

我正在与熊猫分组挣扎,这可能很容易解决。 e.g。

name  number
A    10
A    8

B    7
B    6
B    9

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

我认为必须能够groupbyapplyfilter,但不记得,如何。

3 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:2)

您可以transform使用min进行掩码,使用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

答案 2 :(得分:2)

这也可以用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