如何将Pandas DataFrame多列唯一值按指定参考列表统一替换
实现方法
核心思路是先提取全表(或指定列)的全局唯一值,与参考列表配对生成全局映射字典,再统一替换即可,天然保证同一个原始值的映射结果全局一致。
完整代码示例如下:
import pandas as pd # 构造示例数据 data = {'col1': ["Bruce Wayne", "Clark Kent", "Peter Parker"], 'col2': ["Alfred Pennyworth", "Bruce Wayne", "Clark Kent"]} df = pd.DataFrame(data=data) AlternativeNames = ["Batman", "Superman", "Spiderman", "Batman's butler"] # 1. 提取所有列的全局唯一值,如需指定处理列,替换为 df[['col1','col2']] 即可 # 若需要固定映射顺序,可以手动调整该列表的元素顺序 all_unique_vals = pd.unique(df.values.flatten()) # 示例中要对齐期望输出,可以手动调整顺序为: # all_unique_vals = ["Bruce Wayne", "Clark Kent", "Peter Parker", "Alfred Pennyworth"] # 2. 生成全局映射字典 replace_map = dict(zip(all_unique_vals, AlternativeNames)) # 3. 全表统一替换 df = df.replace(replace_map) print(df)
注意事项
- 需保证参考列表
AlternativeNames的长度≥全局唯一值的数量,否则会出现部分原始值无对应替换值的情况。 - 你提到熟悉
pd.factorize(),也可以用该方法配合索引取参考列表值实现替换,本质逻辑和上述方法一致,这里用映射字典的写法可读性更高。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

