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

用向量化方法替代列表推导式为大型DataFrame构建新特征

问题描述

现有如下pandas DataFrame:

import pandas as pd
data = pd.DataFrame({'group':['A', 'A', 'B', 'C', 'C', 'B'],
             'value':[0.2, 0.21, 0.54, 0.02, 0.001, 0.19]})

需要构建三个新特征,目标输出如下:

pd.DataFrame({'group':['A', 'A', 'B', 'C', 'C', 'B'],
              'value':[0.2, 0.21, 0.54, 0.02, 0.001, 0.19],
              'group_A':[0.2, 0.21, 0,0,0,0],
              'group_B':[0,0,0.54, 0, 0, 0.19],
              'group_C':[0,0,0,0.02, 0.001,0]})

当前通过以下循环方式实现,但面对大型数据集效率不足,寻求更高效的向量化实现方案:

for g in data.group.unique():
    tmp= [0 if j==g else i for i, j in zip(data.value, data.group)]
    data['group_{}'.format(g)]=tmp
最优向量化实现方案

直接利用pandas的**get_dummies**结合向量化乘法实现,完全避免循环,效率远高于逐行遍历,尤其适配大型数据集:

# 生成分组的one-hot编码矩阵
dummies = pd.get_dummies(data['group'], prefix='group')
# 将one-hot矩阵与value列做元素级乘法,得到对应分组的特征值
group_features = dummies.mul(data['value'], axis=0)
# 合并原数据与新生成的特征列
result = pd.concat([data, group_features], axis=1)

方案优势

  • 极致效率:基于numpy底层的向量化运算,比Python循环快数倍甚至数十倍,处理百万级数据时差距尤为显著
  • 代码简洁:自动识别所有唯一分组,无需手动遍历,避免遗漏或人为错误
  • 内存友好:利用数组广播机制完成运算,无需额外创建大量临时对象

验证输出与目标完全一致:

print(result)
# 输出:
  group  value  group_A  group_B  group_C
0     A   0.20     0.20     0.00     0.00
1     A   0.21     0.21     0.00     0.00
2     B   0.54     0.00     0.54     0.00
3     C   0.02     0.00     0.00     0.02
4     C   0.00     0.00     0.00     0.00
5     B   0.19     0.00     0.19     0.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:31:12