基于ID与ID2匹配键填充DataFrame中val1、val2的缺失值
按ID与ID2组合填充DataFrame缺失值
需求:以ID和ID2作为匹配键,填充val1和val2列的缺失值,要求同一ID+ID2组合的val1、val2值保持一致。
原始数据
import pandas as pd import numpy as np df = pd.DataFrame({'ID':[0,0,0,1,1,1], 'DATE':['2021', '2022', '2023', '2021', '2022', '2023'], 'ID2':[23, 34, 54, 321, 1244, 1244], 'val1':[np.nan, 200, 300, np.nan, 234, np.nan], 'val2':[55555, 66666, 77777, 88888, 99999, np.nan], 'val3':['A', 'F', 'W', 'T', 'I', 'O']})
解决方案
通过groupby按ID和ID2分组,对目标列使用双向填充(ffill()+bfill()),确保同一组合内的缺失值被该组合的非缺失值覆盖:
df[['val1', 'val2']] = df.groupby(['ID', 'ID2'])[['val1', 'val2']].apply(lambda x: x.ffill().bfill())
也可以通过transform取分组内首个非空值填充,逻辑更直观:
df[['val1', 'val2']] = df.groupby(['ID', 'ID2'])[['val1', 'val2']].transform( lambda x: x.fillna(x.dropna().iloc[0] if not x.dropna().empty else x) )
验证结果
执行代码后输出:
print(df)
得到预期结果:
ID DATE ID2 val1 val2 val3 0 0 2021 23 NaN 55555 A 1 0 2022 34 200.0 66666 F 2 0 2023 54 300.0 77777 W 3 1 2021 321 NaN 88888 T 4 1 2022 1244 234.0 99999 I 5 1 2023 1244 234.0 99999 O
内容的提问来源于stack exchange,提问作者Henri
相关产品推荐
相关产品推荐

