如何基于city及列匹配将filling DataFrame填充到mask的NaN空位中
解决方案
你可以直接利用pandas.DataFrame.fillna()的自动对齐特性实现需求,代码如下:
# 先保存原mask的索引与列顺序,避免操作后结构错乱 origin_index = mask.index origin_cols = mask.columns # 将mask临时设置city为索引,用filling按索引+列名匹配填充NaN result = mask.set_index('city').fillna(filling).reset_index() # 恢复原索引与列顺序 result = result.set_index(origin_index)[origin_cols]
运行后得到的result就是你需要的目标结果。
实现原理
fillna()传入DataFrame时,会自动根据索引和列名两个维度做匹配,用传入的DataFrame的值填充原DataFrame的NaN值- 我们临时把
mask的city列设为索引,正好和filling的索引(城市名)对齐,value_1、value_2列名完全一致,填充逻辑会自动匹配你要的规则 - 填充完成后恢复原索引和列顺序即可
原有方案错误原因
你用merge的方式会默认把两个DataFrame里所有同名的列作为连接匹配条件,mask和expanded都有value_1、value_2列,merge时会匹配这两列的数值,原本为NaN的单元格无法匹配到对应行,自然无法完成填充。
内容的提问来源于stack exchange,提问作者Jivan
相关产品推荐
相关产品推荐

