如何用Pandas的pivot实现分组后各Rank的出现次数统计
使用Pivot统计分组内各排名的数量
示例DataFrame
from io import StringIO import pandas as pd df = pd.read_csv(StringIO(""" Group Date Rank A 01-01-2023 1 A 01-02-2023 2 A 01-03-2023 3 A 01-04-2023 2 A 01-05-2023 1 A 01-06-2023 1 A 01-07-2023 3 A 01-08-2023 2 B 01-01-2023 2 B 01-02-2023 3 B 01-03-2023 2 B 01-04-2023 1 B 01-05-2023 3 B 01-06-2023 2 B 01-07-2023 1 B 01-08-2023 3"""), sep="\s+")
需求
按Group分组,统计每个分组内不同Rank(1、2、3)的出现次数,输出格式如下:
Group Count of 1 Count of 2 Count of 3 A 3 3 2 B 2 3 3
使用Pivot实现的方法
可以通过pivot_table实现这类分组统计需求,代码如下:
# 生成透视表,统计每个Group下各Rank的数量 result = df.pivot_table( index='Group', # 行索引设为Group columns='Rank', # 列按Rank值拆分 aggfunc='size', # 统计对应组合的行数(即出现次数) fill_value=0 # 空值填充为0 ).reset_index() # 重命名列名,匹配需求格式 result.columns = ['Group'] + [f'Count of {col}' for col in result.columns[1:]] # 打印结果 print(result)
输出结果
Group Count of 1 Count of 2 Count of 3 0 A 3 3 2 1 B 2 3 3
说明
aggfunc='size'用于统计每个Group-Rank组合的行数,也就是对应Rank的出现次数;fill_value=0保证如果某个分组没有对应Rank值时,统计数显示为0而非空值;- 通过列表推导式重命名列,让输出格式和需求完全匹配。
内容的提问来源于stack exchange,提问作者Yogesh Kamboj
相关产品推荐
相关产品推荐

