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

如何用Pandas将频次统计数据转换为指定样式的透视表?

解决方法

你可以通过两种方式实现需求的透视表:

方法1:使用pd.crosstab(推荐,更简洁)

crosstab专门用于计算分组频率,默认会自动填充缺失类别为0,非常适配你的场景:

import pandas as pd

# 构造示例数据
data = {'Number': [123, 123, 455, 455, 455], 'Type': ['A', 'B', 'B', 'A', 'C']}
df = pd.DataFrame(data)

# 生成透视表
pivot_df = pd.crosstab(df['Number'], df['Type']).reset_index()
# 添加SUM列,计算每行各Type的计数总和
pivot_df['SUM'] = pivot_df[['A', 'B', 'C']].sum(axis=1)

# 查看结果
print(pivot_df)

方法2:使用pivot_table

如果坚持用pivot_table,需要指定计数类的聚合函数、填充缺失值,再手动添加SUM列:

import pandas as pd

data = {'Number': [123, 123, 455, 455, 455], 'Type': ['A', 'B', 'B', 'A', 'C']}
df = pd.DataFrame(data)

pivot_df = df.pivot_table(
    index='Number',
    columns='Type',
    aggfunc='size',  # 统计每个(Number, Type)组合的行数
    fill_value=0     # 把不存在的Type组合填充为0
).reset_index()

# 添加SUM列
pivot_df['SUM'] = pivot_df.sum(axis=1)

print(pivot_df)

你之前可能踩的坑:

  • 没设置fill_value=0,导致缺失的Type显示NaN而非0
  • 用了错误的aggfunc(比如默认的mean),而非计数类的size/count
  • 没调用reset_index(),导致Number是索引而非普通列
  • 忘记添加SUM列

两种方法最终输出都符合你的需求:

Type  Number  A  B  C  SUM
0        123  1  1  0    2
1        455  1  1  1    3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:57:02