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

Pandas用transpose/pivot/groupby实现行值转列并统计计数

实现代码与说明

你需要的分组转列计数逻辑,有两种常用的pandas实现方案,输出结果完全一致:

方法1:pd.crosstab 实现(写法最简洁)

crosstab是pandas内置的专门用于交叉频次统计的函数,不需要额外处理空值,默认会把不存在的组合计数填0:

import pandas as pd
import numpy as np

# 原始测试数据
df = pd.DataFrame({ 
     'Year': [2022,2022,2022,2022,2022,2022,2022,2022],
    'Quarter':[2,2,2,2,1,1,2,2],
    'Product':['Car','Bike','Car','Bus','Bike','Bus','Car','Bike'],
})

# 按Year、Quarter分组,统计各Product出现次数,转Product为独立列
result = pd.crosstab(
    index=[df['Year'], df['Quarter']],
    columns=df['Product']
).reset_index() # 把分组字段从多层索引转回普通列,方便后续使用

print(result)

运行输出结果:

Year  Quarter  Bike  Bus  Car
0  2022        1     1    1    0
1  2022        2     2    1    3

方法2:groupby + unstack 实现(逻辑更直观)

如果更习惯用分组操作的逻辑写代码,可以先分组计数,再把Product维度从行转列:

result = (
    df
    .groupby(['Year', 'Quarter', 'Product'])
    .size() # 统计每个(Year,Quarter,Product)组合的记录数
    .unstack(fill_value=0) # 将Product这层索引转为独立列,缺失值填0
    .reset_index()
)

提示:如果不需要把不存在的产品计数填为0,可以去掉fill_value=0参数,对应位置会返回空值NaN。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:12:34