如何用Pandas逐行将DataFrame某列子串替换为另一列对应值?
解决方案
可以利用Pandas的apply方法结合字典的get方法实现需求,无需手动逐行遍历,代码简洁且符合Pandas原生用法:
import pandas as pd # 构造示例DataFrame data = { 'A': [ 'Ireland France Germany Poland', 'Ireland Iceland Singapore Portugal', 'Spain Italy Denmark' ], 'B': [ {'Ireland': 'Dublin', 'Germany': 'Berlin'}, {'Ireland': 'Dublin', 'France': 'Paris', 'Norway': 'Olso', 'Portugal': 'Lisbon'}, {'Italy': 'Rome', 'Finland': 'Helsinki'} ] } df = pd.DataFrame(data) # 执行替换操作 df['A'] = df.apply( lambda row: ' '.join([row['B'].get(word, word) for word in row['A'].split()]), axis=1 ) print(df)
代码说明:
apply(..., axis=1):指定按行处理数据,让每一行的A和B列能关联起来row['A'].split():将A列的文本拆分为单个单词row['B'].get(word, word):检查当前单词是否存在于该行B列的字典中,存在则替换为对应值,不存在则保留原单词' '.join(...):将处理后的单词重新拼接为完整文本
为什么之前的方法不生效:
df['A'].replace(df['B']):这个写法是尝试用整个B列的字典做全局替换,而非每行对应自己的字典,所以无法匹配行级别的替换规则str.replace:默认仅支持全局固定文本或正则替换,无法直接关联每行的B列字典作为替换规则
内容的提问来源于stack exchange,提问作者Mike Woodward
相关产品推荐
相关产品推荐

