gpt4 book ai didi

pandas - 不使用 Lambda 的 Groupby 应用过滤器

转载 作者:行者123 更新时间:2023-12-02 05:47:27 25 4
gpt4 key购买 nike

假设我有这些数据:

data = {
'batch_no': [42, 42, 52, 52, 52, 73],
'quality': ['OK', 'NOT OK', 'OK', 'NOT OK', 'NOT OK', 'OK'],
}
df = pd.DataFrame(data, columns = ['batch_no', 'quality'])

这给了我以下数据框

batch_no    quality
42 OK
42 NOT OK
52 OK
52 NOT OK
52 NOT OK
73 OK

现在我需要找到每个 batch_noNOT OK 的计数。

我可以使用 groupbyapply 以及 lamda 函数来实现这一点,如下所示:

df.groupby('batch_no')['quality'].apply(lambda x: x[x.eq('NOT OK')].count())

这给了我以下期望的输出

batch_no
42 1
52 2
73 0

然而,即使在我大约 300 万行的中等大小的数据上,这也非常慢,并且无法满足我的需求。

有没有快速的替代方案?

最佳答案

您可以比较列 quality,然后是 groupby通过 batch_no 和聚合 sumTrue 是类似于 1 的过程,因此它计算值:

df = df['quality'].eq('NOT OK')
.groupby(df['batch_no']).sum()
.astype(int)
.reset_index(name='count')
print (df)
batch_no count
0 42 1
1 52 2
2 73 0

详细信息:

print (df['quality'].eq('NOT OK'))
0 False
1 True
2 False
3 True
4 True
5 False
Name: quality, dtype: bool

关于pandas - 不使用 Lambda 的 Groupby 应用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51045365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com