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

如何在Python中基于ID填充DataFrame的Test Done列空值?

问题

现有如下DataFrame:

ID       Test Done      Test Action    Test Date
1234     Happy Test     Decline        2021-11-30
1234     None           Decline        None
1235     Sad Test       Decline        2022-03-24
1235     None           Decline        2022-03-04
1235     None           Decline        2022-03-04
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06

需要实现:用每个ID对应的Test Done列中第一个非None值,填充该ID下所有Test Done为None的行,已填充的行保持不变,最终得到如下结果:

ID       Test Done      Test Action    Test Date
1234     Happy Test     Decline        None
1235     Sad Test       Decline        2022-03-24
1235     Sad Test       Decline        2022-03-04
1235     Sad Test       Decline        2022-03-04
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06
1236     Lonely Test    Decline        2022-05-06
解决方案

使用Pandas的groupby+transform组合可以高效实现需求,核心逻辑是按ID分组后,用每组第一个非空的Test Done值填充组内所有空值:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ID': [1234, 1234, 1235, 1235, 1235, 1236, 1236, 1236],
    'Test Done': ['Happy Test', None, 'Sad Test', None, None, 'Lonely Test', 'Lonely Test', 'Lonely Test'],
    'Test Action': ['Decline'] * 8,
    'Test Date': ['2021-11-30', None, '2022-03-24', '2022-03-04', '2022-03-04', '2022-05-06', '2022-05-06', '2022-05-06']
})

# 填充逻辑
df['Test Done'] = df.groupby('ID')['Test Done'].transform(
    lambda grp: grp.fillna(grp.dropna().iloc[0]) if not grp.dropna().empty else grp
)

# 输出结果
print(df)

关键细节

  • groupby('ID'):将数据按ID拆分,保证每个ID的填充独立进行
  • transform:使分组处理后的结果能与原DataFrame的行一一对应,直接覆盖原列
  • grp.dropna().iloc[0]:提取分组内第一个非空/非None的Test Done值;添加if not grp.dropna().empty是为了兼容某个ID下全为None的极端情况,避免索引报错
  • fillna:用提取到的基准值填充分组内所有None值,已存在非空值的行不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:45:31