使用Python pandas参照另一张表映射关系替换DataFrame指定字段值
实现DataFrame列值按映射替换的两种方法
方法1:使用replace方法(你需求中提到的实现方式)
你只需要先将df2的主机名-用户名映射转换为字典,再传入replace方法即可,示例代码如下:
# 假设df2的主机名列名为host,对应用户名列名为user,先构造映射字典 map_dict = df2.set_index('host')['user'].to_dict() # 执行df1的B列替换 df1['B'] = df1['B'].replace(map_dict)
如果B列存在没有在映射关系里的主机名,原值会自动保留不会被修改。
方法2:使用map方法(数据量较大时更推荐)
如果你的数据量级较高,map方法的执行效率会优于replace,实现逻辑如下:
df1['B'] = df1['B'].map(map_dict)
注意:map方法在遇到无匹配的主机名时会返回NaN,如果你需要保留未匹配的原值,可以补充fillna逻辑:
df1['B'] = df1['B'].map(map_dict).fillna(df1['B'])
可直接运行的验证示例
你可以用以下示例代码测试效果:
import pandas as pd # 构造示例df1 df1 = pd.DataFrame({ "序号": [1,2,3,4], "B": ["host-1", "host-2", "host-3", "host-4"] }) # 构造映射表df2 df2 = pd.DataFrame({ "host": ["host-1", "host-2", "host-3"], "user": ["张小明", "李小红", "王大锤"] }) # 生成映射字典 map_dict = df2.set_index("host")["user"].to_dict() # 执行替换 df1["B"] = df1["B"].replace(map_dict) print(df1)
运行后输出的df1的B列会变为["张小明", "李小红", "王大锤", "host-4"],未匹配的host-4保留原值。
内容的提问来源于stack exchange,提问作者codingcloudcowboy
相关产品推荐
相关产品推荐

