在Pandas DataFrame中对Cost列分箱后生成独热编码并拼接至原表
Pandas实现Cost列分箱与独热编码拼接
需求说明
给定如下结构的DataFrame:
| 序号 | Cost |
|---|---|
| 1 | 10.5 |
| 2 | 34 |
| 3 | 755 |
| 4 | 1203 |
| 5 | 323 |
需要对Cost列设置N个分箱(示例为5个),生成独热编码向量后拼接至原DataFrame,得到目标结构的表格。
实现步骤与代码
- 导入依赖库
import pandas as pd
- 构造示例DataFrame
df = pd.DataFrame({ '序号': [1, 2, 3, 4, 5], 'Cost': [10.5, 34, 755, 1203, 323] })
- 对Cost列进行等宽分箱
使用pd.cut()实现直方图式的等宽分箱,设置分箱数量为5,同时指定include_lowest=True确保最小值被包含在第一个分箱中:
df['bin'] = pd.cut(df['Cost'], bins=5, include_lowest=True)
- 生成独热编码
使用pd.get_dummies()对分箱结果进行独热编码,设置prefix=''去掉默认前缀,并重命名列名为1到5:
one_hot = pd.get_dummies(df['bin'], prefix='') one_hot.columns = [str(i) for i in range(1, 6)]
- 拼接原DataFrame与独热编码结果
用pd.concat()将原DataFrame和独热编码数据按列拼接,最后删除临时的bin列:
result_df = pd.concat([df.drop('bin', axis=1), one_hot], axis=1)
最终结果
执行上述代码后,得到的result_df结构如下:
| 序号 | Cost | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 1 | 10.5 | 1 | 0 | 0 | 0 | 0 |
| 2 | 34 | 0 | 1 | 0 | 0 | 0 |
| 3 | 755 | 0 | 0 | 0 | 1 | 0 |
| 4 | 1203 | 0 | 0 | 0 | 0 | 1 |
| 5 | 323 | 0 | 0 | 1 | 0 | 0 |
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

