如何在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]})
对应的表格展示:
| Year | Decade | Rating |
|---|---|---|
| 1991 | 90s | 0 |
| 1992 | 90s | 0 |
| 1993 | 90s | 1 |
| 2000 | 2_00s | 3 |
| 2020 | 2_20s | 3 |
| 2022 | 2_20s | 2 |
| 1980 | 80s | 3 |
需求
按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
相关产品推荐
相关产品推荐

