You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按id和group分组统计Cat的出现次数?

解决Pandas按多列分组统计指定值出现次数的问题

我来帮你搞定这个Pandas分组统计的问题!先明确下你的场景和需求:

现有如下DataFrame:

import pandas as pd
df = pd.DataFrame([
    ('A', 'A', 'Cat'), ('A', 'A', 'Dog'), ('A', 'A', 'Cat'),
    ('A', 'B', 'Dog'), ('B', 'B', 'Rat'), ('B', 'C', 'Cat'), ('B', 'C', 'Cat')
], columns=['id', 'group', 'Animal'])

需求:按id和group分组,统计每组中Cat的出现次数,期望输出为[2, 0, 0, 2](对应AA组2只Cat、AB组0只、BB组0只、BC组2只)

这里给你两种简单高效的实现方法:

方法一:简洁直接的单目标统计法

这种方法专门针对Cat做统计,代码短且高效:

# 按id和group分组,统计每组中Cat的数量
cat_counts = df.groupby(['id', 'group'])['Animal'].apply(lambda x: (x == 'Cat').sum()).tolist()
print(cat_counts)  # 输出: [2, 0, 0, 2]

逻辑解释:

  • groupby(['id', 'group']):把id和group组合相同的行归为一组,比如所有id=A且group=A的行是一组
  • apply(lambda x: (x == 'Cat').sum()):对每个组的Animal列做判断——把等于'Cat'的元素标记为True(等价于1),否则为False(等价于0),再用sum()统计总数量
  • .tolist():把最终的统计结果转成你需要的列表格式

方法二:支持多动物统计的通用法

如果你之后需要同时统计其他动物的数量,这种方法会更灵活:

# 分组后统计所有动物的出现次数,缺失的动物用0填充
grouped_animal_counts = df.groupby(['id', 'group'])['Animal'].value_counts().unstack(fill_value=0)
# 提取Cat列的结果转为列表
cat_counts = grouped_animal_counts['Cat'].tolist()
print(cat_counts)  # 输出: [2, 0, 0, 2]

逻辑解释:

  • value_counts():统计每个组内各动物的出现次数,比如AA组会得到Cat:2, Dog:1
  • unstack(fill_value=0):把动物名称从行索引转成列,没有出现过的动物用0填充,这样每个组都会有Cat的计数(哪怕是0)
  • 除了提取Cat列,你还可以直接查看grouped_animal_counts,获取所有动物的分组统计结果

内容的提问来源于stack exchange,提问作者user9617403

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:07:02