如何根据pandas DataFrame的索引列与值列修改numpy零数组
高效实现方法
直接用numpy花式索引做向量化赋值即可,无Python层循环,是性能最优的方案。
完整示例代码
import pandas as pd import numpy as np # 构造题述的DataFrame df = pd.DataFrame({'x': [2, 3, 5], 'y': [4, 1, 9]}) # 初始化长度为6的全零数组 arr = np.zeros(6, dtype=int) # 核心赋值操作 arr[df['x'].to_numpy()] = df['y'].to_numpy()
执行后arr的输出为:
array([0, 0, 4, 1, 0, 9])
注意事项
- 该实现全程走numpy底层向量化逻辑,执行效率远高于
iterrows逐行遍历、apply逐值映射等写法,数据规模越大性能差距越明显。 - 调用
.to_numpy()将pandas Series转为原生numpy数组,可以跳过pandas的索引对齐检查,赋值速度更快;如果数据量小,直接写arr[df['x']] = df['y']也能得到正确结果。 - 你已经确认x列值唯一、且所有x值都在目标数组的索引范围内(本题为0-5),不会出现索引越界、同索引重复赋值覆盖的问题,可直接复用该逻辑。
内容的提问来源于stack exchange,提问作者1_million_bugs
相关产品推荐
相关产品推荐

