如何透视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
相关产品推荐
相关产品推荐

