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

Python Pandas如何按ObjectID分组用同组已知值替换NaN?

简便实现方案

你可以直接用 Pandas 分组后的 transform 方法实现需求,只需要一行核心代码就能完成填充,完全不需要写循环,性能和可读性都好很多:

import pandas as pd
import numpy as np

# 示例数据
sample_frame = {'UniqueID': [1,2,3,4,5,6,7],"PersonID": [3,2,2,5,5,4,4], "Name": 
    ["Alice",np.nan,"Bob","Joe","Joe",np.nan,np.nan]}
sample_frame = pd.DataFrame(data = sample_frame)

# 核心填充逻辑
sample_frame['Name'] = sample_frame.groupby('PersonID')['Name'].transform('first')

逻辑说明

  • 按PersonID分组后,transform('first')会自动取每个分组里第一个非空的Name值,组内所有行统一返回该值
  • 如果某个分组所有Name都是空值,会直接返回NaN,符合不需要处理的要求
  • 由于你明确说明该变量取值仅和对象相关,同一个PersonID下的非空值一定一致,所以用'first'、'last'都可以得到正确结果。如果存在特殊场景同个ID下有多个不同非空值,可替换为取众数的逻辑:transform(lambda x: x.mode()[0] if x.notna().any() else np.nan)
  • 如果需要批量处理多个同规则填充的列,直接替换列名部分即可,示例:
    # 同时填充Name、Age、Gender三列
    fill_cols = ['Name', 'Age', 'Gender']
    sample_frame[fill_cols] = sample_frame.groupby('PersonID')[fill_cols].transform('first')
    

结果验证

运行后sample_frame的Name列会变成:["Alice", "Bob", "Bob", "Joe", "Joe", np.nan, np.nan],完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:09:00