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

如何在pandas列值重映射时从指定列表随机抽取对应结果

pandas单列数值带随机规则的重映射方法

错误原因

你之前的写法出错是因为构造映射字典时,random.choice(choice_list)仅执行1次,字典中键2对应的是单次执行得到的固定结果,后续调用map或replace时,所有值为2的行都会匹配这个固定值,无法实现逐行随机。

推荐解决方案

方案1:向量化操作(适合大数据量,性能更高)

优先用numpy向量化随机实现,比逐行操作效率高很多:

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({"col1": [1, 2, 3, 4, 5, 6, 7, 8], "col2": [2, 2, 2, 3, 1, 2, 2, 1]})

# 先处理固定映射规则
df['remap'] = df['col2'].map({1: 'a', 3: 'd'})
# 筛选出需要随机映射的行,逐行随机赋值
mask = df['col2'] == 2
df.loc[mask, 'remap'] = np.random.choice(['b', 'c'], size=mask.sum())

方案2:自定义映射函数(适合规则复杂的场景)

如果有多个需要随机映射的取值,自定义函数配合apply可读性更强:

import pandas as pd
import random

# 示例数据
df = pd.DataFrame({"col1": [1, 2, 3, 4, 5, 6, 7, 8], "col2": [2, 2, 2, 3, 1, 2, 2, 1]})

def custom_remap(val):
    if val == 1:
        return 'a'
    elif val == 2:
        return random.choice(['b', 'c'])
    elif val == 3:
        return 'd'
    # 其他值可按需返回原值/NaN等
    return pd.NA

df['remap'] = df['col2'].apply(custom_remap)

调试提示

如果需要固定随机结果方便复现,可以在执行随机操作前设置随机种子:

# 配合方案1使用
np.random.seed(123)
# 配合方案2使用
random.seed(123)

内容的提问来源于stack exchange,提问作者Saaru Lindestøkke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:18:04