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

如何随机打乱pandas DataFrame列并保证重复姓名组映射相同新值

实现方案

核心思路是先给每个独立用户(Name+surname唯一组合)预分配打乱后的新名称,再批量映射回原数据集,保证同一用户的所有记录新名称完全一致。

完整实现代码

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'Name': ['John', 'Arthur', 'Arthur', 'Mike'],
    'surname': ['Bisham', 'Lefer', 'Lefer', 'Loner']
})

# 步骤1:提取所有唯一用户,生成用户到新名称的映射
unique_users = df[['Name', 'surname']].drop_duplicates()
# 步骤2:打乱原Name列的唯一值作为新名称池,保证和原唯一用户数量一致
shuffled_names = np.random.permutation(df['Name'].unique())
# 步骤3:建立唯一用户和新名称的映射关系
user_map = unique_users.assign(new_name=shuffled_names).set_index(['Name', 'surname'])['new_name']
# 步骤4:映射回原DataFrame
df['new name'] = df.set_index(['Name', 'surname']).index.map(user_map)

print(df)

输出示例(每次运行new name列会随机变化,同一用户新名称保持一致)

Name surname new name
0    John  Bisham     Mike
1  Arthur   Lefer     John
2  Arthur   Lefer     John
3    Mike   Loner   Arthur

如果需要用和原Name完全不重名的自定义新名称,只需要把shuffled_names替换成你自定义的名称列表即可,示例如下:

# 自定义新名称列表,长度需要和唯一用户数量一致
custom_names = ['Rick', 'Mark', 'Peter']
user_map = unique_users.assign(new_name=custom_names).set_index(['Name', 'surname'])['new_name']

运行后即可得到和你给出的示例完全一致的输出效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 14:15:05