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

Pandas:查找每行最大值对应列位置并基于该信息填充Age缺失值

Pandas实现缺失Age填充方案

实现逻辑

  • 先逐行提取Col_A、Col_B、Col_C三列的最大值对应的列名,作为匹配依据
  • 统计Age非空的行,按上述最大值列分组计算Age均值
  • 对Age缺失的行,用其对应最大值列的均值填充缺失值

完整实现代码

import pandas as pd
import numpy as np

# 构造示例数据集,实际使用时替换为你自己的数据集读取代码即可
data = {
    "ID": [1, 2, 3, 4, 5, 6],
    "Age": [20, np.nan, 25, 30, np.nan, 27],
    "Col_A": [1, 6, 5, 3, 6, 1],
    "Col_B": [5, 8, 6, 4, 2, 8],
    "Col_C": [3, 9, 7, 6, 1, 4]
}
df = pd.DataFrame(data)

# 步骤1:计算每行三列的最大值对应的列名
target_cols = ["Col_A", "Col_B", "Col_C"]
df["max_col"] = df[target_cols].idxmax(axis=1)

# 步骤2:计算每个最大值列对应的非空Age均值
col_age_mean = df.dropna(subset=["Age"]).groupby("max_col")["Age"].mean()
# 若需要和示例一致取整,可替换为:col_age_mean = df.dropna(subset=["Age"]).groupby("max_col")["Age"].mean().round(0)

# 步骤3:填充Age缺失值
df["Age"] = df.apply(
    lambda row: col_age_mean[row["max_col"]] if pd.isna(row["Age"]) else row["Age"],
    axis=1
)

# 可选:删除临时生成的max_col列
df.drop("max_col", axis=1, inplace=True)

print(df)

结果说明

示例数据运行后,ID为2的行Age会被填充为27.5(取整后为28,和示例结果一致)。如果存在某最大值列没有对应非空Age的情况,可以在计算均值后补充兜底逻辑,比如用全局Age均值填充空缺的分组均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:07