如何用Pandas按ID分组取前两条均值替换原值并填充feature列NaN
Pandas实现方案
完整代码
import pandas as pd import numpy as np # 1. 读取数据,此处可替换为你的文件路径 df = pd.read_csv('your_data.csv') # 清理列名多余空格,避免匹配错误 df.columns = df.columns.str.strip() # 2. 定义分组处理函数 def process_feature_group(group): feat_cols = ['feature1', 'feature2'] # 提取两列均为非空的有效行 valid_rows = group.dropna(subset=feat_cols) valid_cnt = len(valid_rows) if valid_cnt >= 2: # 取前两条有效值计算均值,替换整组对应列 mean_val = valid_rows[feat_cols].head(2).mean() group[feat_cols] = mean_val elif valid_cnt == 1: # 仅1条有效值时前向填充 group[feat_cols] = group[feat_cols].ffill() # 无有效值的场景默认保留原值,可按需新增逻辑 return group # 3. 按ID分组应用处理逻辑 df_result = df.groupby('ID', group_keys=False).apply(process_feature_group) # 输出验证 print(df_result)
逻辑说明
- 代码默认适配你提供的「feature1、feature2同步空值」的数据集结构,如果实际场景中两列空值不同步,可调整
dropna的subset参数,或分别对两列单独统计有效行数计算填充值。 group_keys=False参数会保留原数据集的结构,不会将分组ID设为额外索引。- 计算均值时默认保留浮点型格式,如需统一整数格式可在赋值时添加
.astype(int)方法。
内容的提问来源于stack exchange,提问作者windsound
相关产品推荐
相关产品推荐

