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
相关产品推荐
相关产品推荐

