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

