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

pandas对含缺失类别的分类序列做透视时如何保留全部类别

解决方案

pivot默认不会保留分类类型中无对应数据的类别,要实现需求可以选择以下两种常用方案:

方案1:使用pivot_table,设置dropna=False

pivot_table 提供了dropna参数控制是否丢弃全缺失值的列,设置为False时会自动保留分类列定义的所有类别,是最简便的实现方式:

import pandas as pd
dfr = pd.DataFrame({
    "id": ["111", "222", "111", "333"], 
    "group": ["a", "a", "b", "b"], 
    "value": [1, 4, 9, 16]})
dfr["group"] = pd.Categorical(dfr["group"], categories=["a", "b", "c"])

res = dfr.pivot_table(
    index="id", 
    columns="group", 
    values="value", 
    dropna=False
)
print(res)

运行输出结果:

group     a     b   c
id                  
111     1.0   9.0 NaN
222     4.0   NaN NaN
333     NaN  16.0 NaN

如果存在多个需要聚合的数值列,不需要修改参数即可兼容。

方案2:pivot完成后手动重索引补全类别

如果偏好使用pivot方法,也可以在得到透视结果后,通过reindex方法补全所有分类类别,注意如果透视后的列是多层索引,需要指定对应的level匹配分类层级:

res = dfr.pivot(index="id", columns="group")
# level=1对应多层列索引中group所在的层级
res = res.reindex(dfr["group"].cat.categories, axis=1, level=1)
print(res)

运行结果和方案1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:10