如何在Pandas分组DataFrame中为缺失类别补0生成完整计数列表
问题描述
我有一个包含name、category、count三列的分组DataFrame(grouped_df),共有7个类别:Categories = ['A','B','C','D','E','F','G']。每个name对应部分类别的count值,我希望按name生成包含所有7个类别count的列表,若某个name没有对应类别的数据,则该类别对应的count显示为0。
我尝试了以下代码:
for i in grouped_df['Names'].unique(): a=grouped_df.loc[grouped_df['Names']==i,:] x=a['Count'].tolist() print(x)
得到的结果为:
[7, 3, 4, 4, 2, 41, 8] [3, 9, 8, 2, 22, 11] [2, 1, 2, 9, 1] [1, 2, 1] [2, 1, 2, 9] [3, 1] [2] [3, 2, 8, 1, 10, 9]
上述结果中,第一个列表包含所有类别的count值,但其余列表因部分类别无对应数据而缺失值。我期望缺失类别对应的count替换为0,每个列表都包含7个类别对应的数值,输出示例如下:
[7, 3, 4, 4, 2, 41, 8] [3, 9, 0, 8, 2, 22, 11] [1, 0, 0, 0, 0, 2, 1] [3, 2, 0, 8, 1, 10, 9] [2, 1, 0, 0, 2, 9, 1] [0, 0, 0, 0, 0, 3, 1] [0, 0, 0, 0, 0, 2, 0] [2, 0, 0, 1, 2, 0, 9]
解决方案
用pivot_table可以高效解决这个问题,步骤如下:
- 定义完整类别列表:
Categories = ['A','B','C','D','E','F','G']
- 生成宽表,自动填充缺失类别为0:
# 注意:如果你的列名是Names/Count,替换成对应的名称 pivot_df = grouped_df.pivot_table( index='name', columns='category', values='count', fill_value=0, aggfunc='sum' # 若同一name+category有重复数据,用sum合并,也可改用first/max等 )
- 调整列顺序,匹配指定的类别顺序:
pivot_df = pivot_df[Categories]
- 转换为目标列表并输出:
# 逐个输出每个name对应的列表 for _, row in pivot_df.iterrows(): print(row.tolist()) # 或者一次性输出所有列表(和示例格式一致) result_lists = pivot_df.values.tolist() print(' '.join(map(str, result_lists)))
这样就能得到每个name对应所有7个类别、缺失值补0的列表,完全符合需求。
内容的提问来源于stack exchange,提问作者Chinmay
相关产品推荐
相关产品推荐

