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

如何转换Python3 pandas分组计数后DataFrame的表格形态?

解决方法:将分组计数的DataFrame转为宽格式表格

这问题我熟!你要的就是把长格式的分组结果转换成宽格式表格,用Pandas的pivot()或者pivot_table()方法就能轻松搞定,我结合你的示例数据给你一步步演示:

第一步:先得到分组计数后的DataFrame

先把你提供的示例代码跑一遍,拿到分组后的结果:

import pandas as pd
df = pd.DataFrame({'x':list('aaabbbbbccccc'),'y':list('2225555577777'), 'z':list('1312223224432')})
# 生成分组计数后的DataFrame
df_counts = df.groupby(['x','y','z'])['z'].count().reset_index(name='counts')

方法1:使用pivot()直接转换

pivot()是最直接的方式,指定行索引、列、对应值即可,最后补全缺失值并转成整数类型:

# 转换为宽格式表格
wide_df = df_counts.pivot(index=['x', 'y'], columns='z', values='counts')
# 缺失值填充为0,转成整数(因为计数都是整数)
wide_df = wide_df.fillna(0).astype(int)

转换后的结果长这样:

1234
xy
a22010
b50410
c70212

如果觉得列上方的z标签多余,可以去掉:

wide_df = wide_df.rename_axis(columns=None)

方法2:使用pivot_table()(更灵活的方案)

如果你的数据存在重复的(x,y,z)组合(虽然这个示例里没有),pivot_table()会更合适,它支持聚合函数,而且可以直接设置填充值:

wide_df = df_counts.pivot_table(
    index=['x', 'y'],
    columns='z',
    values='counts',
    fill_value=0,  # 直接填充缺失值为0
    aggfunc='sum'  # 因为每个组合唯一,sum/count都可以
)

这个方法得到的结果和上面完全一致,而且一步到位,不需要额外的fillna操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:26:01