基于另一列值替换DataFrame中的NaN缺失值
问题:按客户编号替换DataFrame中的NaN缺失值
原始数据
df1(含缺失值)
代码定义:
import pandas as pd import numpy as np df1 = pd.DataFrame([[1001, np.NaN], [1001,'C'], [1004, 'D'],[1005, 'C'], [1005,'D'], [1010, np.NaN],[1010,np.NaN],[1010,'F']], columns=['CustomerNr','Costs'])
对应表格:
| CustomerNr | Costs |
|---|---|
| 1001 | NaN |
| 1001 | C |
| 1004 | D |
| 1005 | C |
| 1005 | D |
| 1010 | NaN |
| 1010 | NaN |
| 1010 | F |
df2(替换规则)
代码定义:
df2 = pd.DataFrame([[1001, 'X'], [1010, 'Y']], columns=['CustomerNr','New Costs'])
对应表格:
| CustomerNr | New Costs |
|---|---|
| 1001 | X |
| 1010 | Y |
期望输出
处理后的df1表格:
| CustomerNr | Costs |
|---|---|
| 1001 | X |
| 1001 | C |
| 1004 | D |
| 1005 | C |
| 1005 | D |
| 1010 | Y |
| 1010 | Y |
| 1010 | F |
解决方案
步骤1:将替换规则转换为字典
把df2中的客户编号和对应替换值转换成字典,实现快速匹配:
replace_dict = df2.set_index('CustomerNr')['New Costs'].to_dict()
步骤2:填充NaN值
通过fillna结合map方法,仅替换Costs列的NaN值,替换逻辑为按客户编号匹配字典中的对应值:
df1['Costs'] = df1['Costs'].fillna(df1['CustomerNr'].map(replace_dict))
执行上述代码后即可得到期望的结果。
内容的提问来源于stack exchange,提问作者j_90
相关产品推荐
相关产品推荐

