pandas 组标准
pandas criterias for groups
我正在为 pandas 分组而苦苦挣扎,这可能很容易解决。
例如
name number
A 10
A 8
B 7
B 6
B 9
在这个数据集中,最简单的向量化方法是什么,我可以用它排除类别(列)"name" 的所有行项目,其中 "number" 的最小值低于 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
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
我正在为 pandas 分组而苦苦挣扎,这可能很容易解决。 例如
name number
A 10
A 8
B 7
B 6
B 9
在这个数据集中,最简单的向量化方法是什么,我可以用它排除类别(列)"name" 的所有行项目,其中 "number" 的最小值低于 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
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