频率编码疑问:是否需要生成哑变量列?
问题解答
可行性确认
完全可行!你想要的这种格式,本质是把类别特征的出现频次统计结果转换成独热编码风格的宽表——每个列对应原类别,单元格值是该类别的出现次数。这种形式适合需要将类别频次作为聚合特征使用的场景,完全符合机器学习数据预处理的需求。
简便实现方法(基于Pandas)
不需要复杂操作,用Pandas的value_counts()结合转置就能快速实现,便捷性和get_dummies()类似:
步骤1:构造示例数据
import pandas as pd df = pd.DataFrame({'CategoryName': ['Blue', 'Blue', 'Blue', 'Yellow', 'Yellow', 'Red']})
步骤2:统计频次并转换格式
# 统计每个类别的出现次数 category_counts = df['CategoryName'].value_counts() # 转置成单行宽表,得到你要的格式 result = pd.DataFrame(category_counts).T
运行后输出的result就是:
Blue Yellow Red CategoryName 3 2 1
如果想去掉索引名(让结果和你示例完全一致),可以再加一行:
result.index = [''] # 清空索引名称
拓展:如果需要相对频率(占比)
如果你的场景需要用类别出现的相对频率(而不是绝对次数),只需要给value_counts()加normalize=True参数:
category_freqs = df['CategoryName'].value_counts(normalize=True) result = pd.DataFrame(category_freqs).T
补充说明
这种方法比手动构建独热表再填充频次高效得多,完全适配Pandas的数据分析工作流,属于Pandas原生的便捷操作。
内容的提问来源于stack exchange,提问作者opperman.eric
相关产品推荐
相关产品推荐

