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
相关产品推荐
相关产品推荐

