如何修正Pandas按类别统计status为yes的计数结果?
问题分析与解决方法
你的两段代码逻辑都不符合需求,导致结果出错:
- 第一段用
nunique()是统计每个分组里布尔值的不同取值数量:student组里有True和False两种取值,所以返回2;employee组里只有False一种取值,所以返回1,这显然不是你要的「status为yes的数量」。 - 第二段的
any().sum()逻辑完全错误:any()是判断每个分组是否存在至少一个True,之后的sum()是把整个分组结果的布尔值加总,根本不是按组统计yes的数量。
正确写法
直接对布尔值序列分组后求和即可(因为True等价于1,False等价于0,求和结果就是status为yes的数量):
df['status'].eq('yes').groupby(df['category']).sum()
或者用更直观的分组聚合写法:
df.groupby('category')['status'].agg(lambda x: (x == 'yes').sum())
还可以用crosstab生成交叉表后提取yes列:
import pandas as pd pd.crosstab(df['category'], df['status'])['yes']
以上三种方法都会得到你期望的结果:
category student 2 employee 0 Name: status, dtype: int64
内容的提问来源于stack exchange,提问作者rainy days.
相关产品推荐
相关产品推荐

