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

Python Pandas透视表统计频次:无需虚拟列的优雅实现方案

问题解答

为什么第二种方法出错?

当你调用df.pivot_table(index='id', columns='type', aggfunc='count')时,因为没有指定values参数,pandas会自动筛选不属于行索引(index)和列索引(columns)的其他列作为统计对象。但你的原DataFrame只有id和type两列:id被设为行索引,type被设为列索引,没有剩余的列可以用来执行计数聚合,所以最终返回的结果只有行索引,没有数值列。

无需新增虚拟列的优雅实现方式

这里提供几种简洁的实现方法:

方法1:使用pd.crosstab(最直接)

crosstab是pandas专门为交叉频数统计设计的函数,一行代码就能得到目标结果:

import pandas as pd
pd.crosstab(df['id'], df['type'])

方法2:给pivot_table指定values参数

只需要指定任意一个现有列作为values(比如type或id),配合count聚合即可,还能通过fill_value补全缺失的计数:

df.pivot_table(index='id', columns='type', values='type', aggfunc='count', fill_value=0)

方法3:groupby + value_counts + unstack

通过分组后统计值频率,再转成宽格式:

df.groupby('id')['type'].value_counts().unstack(fill_value=0)

内容的提问来源于stack exchange,提问作者J-H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:57:51