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

如何使用Pandas根据另一DataFrame匹配结果更新目标DataFrame列值

Pandas 关联填充DataFrame指定列实现方案

核心实现代码

直接通过ID映射的方式完成填充,不会改动原表行顺序、其他列内容,无匹配ID的行自动保留原有空值,完全匹配需求:

# 构建 channels 表ID到官网地址的键值映射
id_to_website = channels.set_index("ID")["Website"].to_dict()
# 按Channel_id匹配填充website列
videos["website"] = videos["Channel_id"].map(id_to_website)

效果验证

你可以用下方代码直接构造样例数据运行测试:

import pandas as pd

# 构造样例channels表
channels = pd.DataFrame({
    "Channel": ["Company A", "Company B", "Company C", "Company D"],
    "ID": ["A0001", "A0002", "A0003", "A0004"],
    "Website": ["a.com", "b.com", "c.com", "d.com"]
})

# 构造样例videos表
videos = pd.DataFrame({
    "Category": ["Comedy", "Action", "Horror", "Comedy", "Comedy", "Comedy"],
    "Channel_id": ["A0003", "A0004", "A0008", "A0001", "A0044", "A0002"],
    "Channel_name": ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF"],
    "website": pd.NA
})

# 执行填充
id_to_website = channels.set_index("ID")["Website"].to_dict()
videos["website"] = videos["Channel_id"].map(id_to_website)

运行后输出的videos表和期望结果完全一致:

CategoryChannel_idChannel_namewebsite
ComedyA0003AAAc.com
ActionA0004BBBd.com
HorrorA0008CCC
ComedyA0001DDDa.com
ComedyA0044EEE
ComedyA0002FFFb.com

特殊场景适配

如果你的videos表website列本身已经存在部分非空值,只需要填充匹配到ID的空行、不覆盖原有内容,可以把填充代码替换为:

videos["website"] = videos["website"].fillna(videos["Channel_id"].map(id_to_website))

说明:这个场景不推荐用pd.merge实现,merge后需要额外清理重复列、校验行顺序,代码冗余度高,单字段映射填充的场景下用map是效率最高、代码最简洁的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:42:44