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

如何使用Pandas基于ID和Wave列的条件填充NaN值?

解决方法:按ID填充Wave=g对应的hiqual值

方法一:建立ID与基准值的映射关系填充

先提取每个ID在Wave='g'时的hiqual值,生成映射关系,再通过ID匹配填充NaN:

import pandas as pd

# 构造你的示例数据
data = {
    'ID': [1,1,1,2,2,2,3,3,4,4],
    'hiqual': [1.0, None, None, 1.0, None, None, 1.0, None, 5.0, None],
    'Wave': ['g','i','k','g','i','k','g','i','g','i']
}
df = pd.DataFrame(data)

# 提取每个ID对应的Wave=g的hiqual基准值
id_hiqual_map = df[df['Wave'] == 'g'].set_index('ID')['hiqual']

# 用基准值填充同一ID下的NaN
df['hiqual'] = df['hiqual'].fillna(df['ID'].map(id_hiqual_map))

执行后结果:

IDhiqualWave
11.0g
11.0i
11.0k
21.0g
21.0i
21.0k
31.0g
31.0i
45.0g
45.0i

方法二:使用groupby分组填充

通过groupby('ID')分组后,直接在组内提取Wave='g'的基准值填充NaN,逻辑更直观:

df['hiqual'] = df.groupby('ID').apply(
    lambda group: group['hiqual'].fillna(group[group['Wave'] == 'g']['hiqual'].iloc[0])
).reset_index(drop=True)

注意事项

  • 如果存在没有Wave=g记录的ID,上述方法会保留该ID下的NaN,你可以根据需求添加额外处理(比如填充0或其他默认值)。
  • 两种方法都能实现需求,第一种映射方式在数据量较大时性能更优,第二种分组方式可读性更强。

内容的提问来源于stack exchange,提问作者newbie_python

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:55:40