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

如何通过其他列过滤对指定列执行fillna()空值填充?

用同姓氏行的有效值填充缺失列

你可以通过Pandas的分组(groupby)结合填充方法实现需求,核心是按Last Name分组,用组内的有效值填充对应列的缺失值,以下是两种常用实现方式:

方法一:用组内首个有效值填充

如果同姓氏组内的Cabin/Destination值唯一,直接取组内第一个非空值填充所有缺失:

import pandas as pd

# 假设你的数据集存储在df中
# 填充Cabin列
df['Cabin'] = df.groupby('Last Name')['Cabin'].transform(
    lambda x: x.fillna(x.dropna().iloc[0]) if not x.dropna().empty else x
)
# 填充Destination列
df['Destination'] = df.groupby('Last Name')['Destination'].transform(
    lambda x: x.fillna(x.dropna().iloc[0]) if not x.dropna().empty else x
)

逻辑说明:

  • groupby('Last Name')将相同姓氏的行归为一组
  • transform确保返回结果与原DataFrame长度一致,不打乱行顺序
  • 先判断组内是否存在非空值,存在则用首个非空值填充组内缺失,否则保留原缺失

方法二:组内前后向填充(适用于组内有多个有效值的场景)

如果同姓氏组内的有效值分布在不同行,可先前向填充(用前面的有效值填后面的缺失),再后向填充(用后面的有效值填前面的缺失),确保组内所有缺失都被覆盖:

df[['Cabin', 'Destination']] = df.groupby('Last Name')[['Cabin', 'Destination']].apply(
    lambda x: x.ffill().bfill()
)

逻辑说明:

  • ffill()会把组内前一行的有效值填充到当前行的缺失
  • bfill()反向填充,把组内后一行的有效值填充到当前行的缺失
  • 两者结合可覆盖组内所有位置的缺失,前提是组内至少有一个有效值

注意事项

  • 如果某个Last Name组内的目标列全为缺失值,上述方法会保留这些缺失(无有效值可用)
  • 若组内存在多个不同的有效值,方法一取首个值,方法二会按行顺序填充,可根据实际业务需求选择

内容的提问来源于stack exchange,提问作者Henry Huynh Pham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:05:19