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

如何在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可以高效解决这个问题,步骤如下:

  1. 定义完整类别列表:
Categories = ['A','B','C','D','E','F','G']
  1. 生成宽表,自动填充缺失类别为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等
)
  1. 调整列顺序,匹配指定的类别顺序:
pivot_df = pivot_df[Categories]
  1. 转换为目标列表并输出:
# 逐个输出每个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:35