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

如何在groupby分组后统计DataFrame某列中两个特定值的数量?

需求与实现方案

原始数据

给定的DataFrame如下:

import pandas as pd

df = pd.DataFrame({'Year':[1991,1992 ,1993,2000,2020,2022,1980],
           'Decade':["90s","90s","90s","2_00s","2_20s","2_20s","80s"],
           'Rating': [0,0,1,3,3,2,3]})

对应的表格展示:

YearDecadeRating
199190s0
199290s0
199390s1
20002_00s3
20202_20s3
20222_20s2
198080s3

需求

按Decade字段分组,统计每个分组中Rating列里值为0和值为3的数量,最终得到如下格式的结果:

Rating
Decade  0       3

80s     0       1
90s     2       0
2_00s   0       1
2_20s   0       1

实现代码

方法1:使用交叉表快速生成

直接用pd.crosstab生成分组统计的交叉表,再筛选目标Rating值:

# 生成交叉表并筛选0和3的统计结果
result = pd.crosstab(df['Decade'], df['Rating'])[[0, 3]]
# 构建多级列头以匹配期望格式
result.columns = pd.MultiIndex.from_tuples([('Rating', 0), ('Rating', 3)])
print(result)

方法2:分组统计+重排结构

通过groupby分组后统计值出现次数,再重新整理结构:

# 分组统计Rating各值的数量,空值填充为0
result = df.groupby('Decade')['Rating'].value_counts().unstack(fill_value=0)[[0, 3]]
# 构建多级列头
result.columns = pd.MultiIndex.from_tuples([('Rating', 0), ('Rating', 3)])
print(result)

运行结果

执行上述代码后,输出结果与期望格式完全一致:

Rating
Decade  0       3
80s     0       1
90s     2       0
2_00s   0       1
2_20s   0       1

内容的提问来源于stack exchange,提问作者Inês Outor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:46:07