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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:40:12