我正在与熊猫分组挣扎,这可能很容易解决。 e.g。
name number
A 10
A 8
B 7
B 6
B 9
在这个数据集中,最简单的矢量化方法是什么,我可以用它来排除类别(列)"名称"的所有行项目。其中"数字"的最小值低于8。 在上面,所有B都将被删除,因为至少有一个元素的值低于8.
我认为必须能够groupby
,apply
或filter
,但不记得,如何。
答案 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