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

如何在Pandas中为大DataFrame添加变量并填充缺失观测值

解决DataFrame合并并填充缺失值的问题

我明白你的需求啦!你之前尝试的merge操作应该是用了默认的内连接(inner join),所以只保留了两个DataFrame共有的139条数据,但你需要的是保留CITATIONS全部668条观测,同时把ENFORE里的Enfore值匹配过去,不匹配的就填充成'X'。下面给你两种可行的解决方案:

方法一:左连接+填充缺失值

用pd.merge的左连接模式(how='left'),以CITATIONS作为左表,这样就能完整保留它的所有行,然后把匹配不到的Enfore值替换成'X':

# 左连接两个DataFrame,保留CITATIONS的所有行
citations_with_enfore = pd.merge(CITATIONS, ENFORE, on='citation', how='left')
# 将Enfore列的缺失值(NaN)填充为'X'
citations_with_enfore['Enfore'] = citations_with_enfore['Enfore'].fillna('X')

方法二:字典映射法

先把ENFORE转换成{citation: Enfore}的字典,再通过映射快速给CITATIONS添加Enfore列,最后填充缺失值:

# 将ENFORE转换为citation到Enfore的映射字典
enfore_mapping = ENFORE.set_index('citation')['Enfore'].to_dict()
# 给CITATIONS添加Enfore列,匹配不到的用'X'填充
CITATIONS['Enfore'] = CITATIONS['citation'].map(enfore_mapping).fillna('X')

为什么之前的方法不对?

默认的pd.merge()使用的是内连接(inner join),只会返回两个DataFrame中citation列完全匹配的行,所以你得到的结果只有139条。而左连接(left join)会保留左表(这里是CITATIONS)的所有行,右表(ENFORE)中匹配不上的字段就会显示为NaN,之后用fillna('X')就能把这些缺失值替换成你需要的标记啦。

最终你得到的DataFrame应该有668条观测,其中139条的Enfore值是0或1,其余的都是'X',完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:29:13