如何用Pandas统计包含True值的分组数量?
统计存在指定值的分组总数
解决方案代码
import pandas as pd # 构建示例DataFrame df = pd.DataFrame({ 'group': [1, 1, 1, 2, 2, 2, 3, 3], 'condition': ["True", "False", "False", "True", "True", "False", "False", "False"] }) # 可选:将字符串类型的条件值转换为布尔类型,便于后续判断 df['condition'] = df['condition'].map({'True': True, 'False': False}) # 按group分组,检查每个组的condition列是否存在至少一个True group_has_true = df.groupby('group')['condition'].any() # 计算总组数和符合条件的分组数 total_groups = len(group_has_true) count_true_groups = group_has_true.sum() # 生成期望格式的结果DataFrame result = pd.DataFrame({ 'groups': [total_groups], 'total_any_true': [count_true_groups] }) print(result)
输出结果
groups total_any_true 0 3 2
关键步骤说明
- 类型处理:示例中
condition列是字符串格式的"True"/"False",转换为布尔类型后可直接用any()方法判断组内是否存在真值;如果不想转换,也可以用lambda x: "True" in x.values替代any()完成判断。 - 分组判断:
groupby('group')['condition'].any()会对每个分组做检查,只要组内有一个True就返回True,最终得到以group为索引、布尔值为结果的Series。 - 统计结果:
len(group_has_true)获取总分组数,sum()统计布尔值为True的数量(布尔值True等价于1,False等价于0)。
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

