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

如何通过匹配weakness列使用df2填充df1中type列的NaN值

解决用df2填充df1中type列NaN值的问题

我明白你遇到的问题了——update()和fillna()默认是按索引匹配的,而你需要的是基于weakness列的映射填充,这两个方法自然达不到预期效果。下面是一个简单高效的解决方案:

步骤1:创建weakness到type的映射字典

首先把df2转换成一个以weakness为键、type为值的字典,这样我们就能快速通过weakness值找到对应的type:

# 从df2生成映射字典
weakness_type_map = df2.set_index('weakness')['type'].to_dict()

步骤2:用映射字典填充df1的type列

接下来使用fillna()结合map()方法,针对df1中type为NaN的行,通过weakness列匹配字典中的值进行填充:

# 填充df1的type列NaN值
df1['type'] = df1['type'].fillna(df1['weakness'].map(weakness_type_map))

为什么这个方法有效?

  • map(weakness_type_map)会遍历df1的weakness列,把每个weakness值替换成字典中对应的type,生成一个新的Series
  • fillna()会只把这个新Series中的值填充到原type列的NaN位置,不会覆盖已有的有效值

验证示例

比如你提到的第8、9行,它们的weakness是flying,对应字典中的值是fighting,执行上面的代码后,这两行的type就会被正确填充为fighting。

如果你的df2中存在重复的weakness值,建议先对df2做去重处理(比如取第一个出现的记录):

# 去重,保留每个weakness的第一条记录
df2_unique = df2.drop_duplicates(subset='weakness', keep='first')
weakness_type_map = df2_unique.set_index('weakness')['type'].to_dict()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:42:51