我正在与熊猫群体奋斗,这可能很容易解决。 例如熊猫群体标准
name number
A 10
A 8
B 7
B 6
B 9
在该数据集,什么是最简单的矢量化方法,利用该可以排除类别的所有行项目(列)“名”,其中的“数量”的最小值为8以下。 在上述所有B将被删除,因为最小有一个元素的值低于8.
我相信它必须可能与groupby
,apply
或filter
,但不记得,如何。
我正在与熊猫群体奋斗,这可能很容易解决。 例如熊猫群体标准
name number
A 10
A 8
B 7
B 6
B 9
在该数据集,什么是最简单的矢量化方法,利用该可以排除类别的所有行项目(列)“名”,其中的“数量”的最小值为8以下。 在上述所有B将被删除,因为最小有一个元素的值低于8.
我相信它必须可能与groupby
,apply
或filter
,但不记得,如何。
使用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
与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
很多感谢您的帮助! –
@GigiHofleitner别忘了投票表达你的感激之情。 – Dark
这也可以用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
非常感谢!我之前尝试过,但是在某个地方犯了一个错误......现在我复制了你的代码并且它可以工作!超快速响应! –