如何根据随机numpy数组替换DataFrame列中匹配原数组的值
Pandas指定列按NumPy数组索引映射替换值实现
已知条件
现有两个等长的int64类型NumPy数组:
- 匹配源数组
arraya:存储所有需要被替换的整数值
arraya= array([550045586, 4926233, 29153854, ..., 550008337, 29387809, 516004], dtype=int64)
- 映射目标数组
arrayrandom:和arraya索引一一对应,存储对应位置的替换值
arrayrandom = array([11000911017, 98523957, 583076377, ..., 11000166037, 587755477, 10319377], dtype=int64)
替换规则
对DataFrame的df['Example']列执行替换:
- 若行值存在于
arraya中,替换为arrayrandom对应索引位置的取值 - 若行值不存在于
arraya中,保留原始值
替换示例:原值550045586、550008337在
arraya中,替换后分别为11000911017、11000166037;原值111不在arraya中,替换后保持111不变。
实现代码
直接构建值映射关系后调用replace方法即可,该方法会自动保留无匹配项的原值,不需要额外写分支判断:
# 构建「待替换值:目标替换值」的映射字典 value_mapper = dict(zip(arraya, arrayrandom)) # 对指定列执行替换 df['Example'] = df['Example'].replace(value_mapper)
注意事项
- 如果
arraya中存在重复值,上述代码默认取重复值最后一次出现对应的arrayrandom值作为映射结果,若需要取首次出现的映射值,可以提前对两个数组做对齐去重处理 - 该实现为pandas原生向量化操作,相比逐行循环判断的写法性能提升1~2个数量级,适配百万级以上行数的DataFrame场景
内容的提问来源于stack exchange,提问作者PV8
相关产品推荐
相关产品推荐

