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

如何用Pandas按分组统计列唯一值并转为单独列?

解决Pandas按分组统计并将唯一值转为列的问题

你可以通过以下几种简洁方法实现需求,把分组后的计数结果转为宽表格式:

方法1:基于你现有代码的unstack()转换

你已经用groupby得到了分组计数的结果,只需要用unstack()把多级索引中的Product转为列,并用fill_value=0填充缺失值即可:

import pandas as pd

# 示例数据
data = {
    'Group': [1,1,1,2,2,2,3,3,3],
    'Product': ['A','A','B','A','B','C','A','C','C']
}
df = pd.DataFrame(data)

# 你的现有代码得到计数
counts = df.groupby(['Group','Product'])['Product'].count()
# 转换为宽表格式
result = counts.unstack(fill_value=0).reset_index()
print(result)

方法2:用pivot_table一步完成

pivot_table可以直接指定行、列、聚合规则,一步生成目标结果:

result = df.pivot_table(
    index='Group',
    columns='Product',
    values='Product',
    aggfunc='count',
    fill_value=0
).reset_index()
print(result)

方法3:用pd.crosstab快速生成交叉表

crosstab是Pandas专门用于生成交叉计数表的工具,语法更简洁:

result = pd.crosstab(df['Group'], df['Product']).reset_index()
print(result)

输出结果(三种方法完全一致):

Product  Group  A  B  C
0            1  2  1  0
1            2  1  1  1
2            3  1  0  2

注:你提供的示例期望结果中Group3的C计数为1,但实际数据里Group3包含2个C(第7、8行),所以正确计数应为2

内容的提问来源于stack exchange,提问作者Levent Sarı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:22:13