如何对分类列执行类独热编码,用另一列值替代默认的1?
自定义标签编码:用Content %值替代独热编码的1
直接用Pandas就能实现这个需求,以下是两种简洁的实现方式:
方法一:独热编码矩阵 × Content %列
这种方法先生成标准独热编码矩阵,再逐行乘以对应行的Content %值,自动替换1为目标数值,其余保持0。
import pandas as pd # 构造示例数据(替换成你的真实数据) df = pd.DataFrame({ 'labels_column': ['A', 'B', 'A', 'C'], 'Content %': [0.25, 0.75, 0.5, 0.3] }) # 生成编码矩阵:独热编码 × Content %值 encoded_matrix = pd.get_dummies(df['labels_column']) * df['Content %'].values.reshape(-1, 1) # 合并原数据其他列(如果需要保留) final_df = pd.concat([df.drop(['labels_column', 'Content %'], axis=1), encoded_matrix], axis=1)
方法二:透视表直接映射
如果你的数据每行是独立样本,用透视表可以直接将标签映射为列,Content %值填充对应位置,其余补0:
# 基于原索引生成透视表,避免重复行聚合 encoded_df = df.pivot_table( index=df.index, columns='labels_column', values='Content %', fill_value=0 ) # 合并其他列 final_df = pd.concat([df.drop(['labels_column', 'Content %'], axis=1), encoded_df], axis=1)
说明
- 两种方法都会自动识别
labels_column中的所有类别,无需手动指定 - 如果存在同一标签对应多行的情况,方法二默认会对Content %值做均值聚合,你可以通过
aggfunc参数修改聚合方式(比如aggfunc='sum')
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

