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

Pandas使用get_dummies时如何补全缺失序列列并保持顺序

解决方案

问题根源是pd.get_dummies()默认仅为数据中实际出现的取值生成独热编码列,不会自动覆盖你期望的完整月份范围,因此会缺失未出现的2、5月列。以下两种方式都可以得到预期结果:

方案1:在现有代码基础上补全缺失列

保留你原有逻辑,运行完成后通过列重索引对齐指定的1-6月序列,缺失列自动填充0即可:

import pandas as pd

# 示例数据
df = pd.DataFrame({'id': [1,1,1,1], 'month': [1,3,4,6]})

# 原有转换逻辑
ndf = df[['id']].join(pd.get_dummies(df['month'])).groupby('id').max()

# 补全列:指定需要的完整月份范围,缺失值填0,同时自动按顺序排序列
full_month_cols = list(range(1, 7))
ndf = ndf.reindex(columns=full_month_cols, fill_value=0)

方案2:提前指定分类范围,自动生成全量列

将month字段转为Pandas分类类型,提前声明所有合法的月份取值,pd.get_dummies()识别到分类类型时会自动为所有分类生成列,无需后续补全:

import pandas as pd

# 示例数据
df = pd.DataFrame({'id': [1,1,1,1], 'month': [1,3,4,6]})

# 将month转为指定取值范围的分类类型
df['month'] = pd.Categorical(df['month'], categories=range(1, 7))

# 直接做独热编码聚合
ndf = pd.get_dummies(df, columns=['month']).groupby('id').max()

# 去掉列名的month_前缀,和原有输出格式保持一致
ndf.columns = [int(col.split('_')[1]) for col in ndf.columns]

两种方案最终输出结果一致,结构如下:

1  2  3  4  5  6
id                  
1   1  0  1  1  0  1

如果后续需要调整月份范围,只需要修改range(1,7)为你需要的起止区间即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:15:36