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

如何透视DataFrame统计各汽车品牌的车型数量并生成新列

解决方法

你的问题出在pivot_table的参数设置完全偏离了需求——你用了原DataFrame的行索引作为分组依据,聚合逻辑也不是计数。下面是几种高效实现目标的方法:

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

crosstab是Pandas专门用于交叉频数统计的工具,直接传入行(品牌)、列(车型)参数就能得到预期结果:

import pandas as pd
result = pd.crosstab(df['Company'], df['Type'])

这个方法会自动统计每个品牌-车型组合的出现次数,不存在的组合自动填充0,完全匹配你的输出要求。

方法2:修正pivot_table参数

如果你偏好使用pivot_table,调整参数即可:将分组索引设为'Company',用count作为聚合函数,同时指定fill_value=0填充缺失值:

result = df.pivot_table(
    index='Company',
    columns='Type',
    values='Type',  # 这里用任意列都可以,只要用来计数
    aggfunc='count',
    fill_value=0
)

方法3:groupby + unstack

先按品牌和车型分组统计数量,再把车型维度从索引转为列:

result = df.groupby(['Company', 'Type']).size().unstack(fill_value=0)

size()用来统计每组的样本数,unstack()完成索引到列的转换,fill_value=0确保缺失的车型显示为0。

效率说明

三种方法中,pd.crosstab和groupby+unstack的效率在大数据量下表现接近,都是最优选择;pivot_table相对稍慢,但差异极小。如果追求代码简洁直观,优先选pd.crosstab。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:01:21