如何通过匹配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,生成一个新的Seriesfillna()会只把这个新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
相关产品推荐
相关产品推荐

