如何基于type与State分组后,分组price列nan不足3个时对缺失值进行填充
问题分析与正确实现
你现有代码的问题主要有3点:
- lambda表达式语法错误:关键词
lambda和参数x之间缺少空格,且Python三元表达式必须补全else分支才能正常运行 - 逻辑判断写反:原需求是判断分组内NaN的数量小于3,你写的
x.count()统计的是分组内非空值的数量,和需求不符 - groupby对象不能直接赋值,且
transform处理单列时不需要额外加axis=1参数
完整可运行代码
import pandas as pd import numpy as np # 构造示例DataFrame,可替换为你自己的数据集 df_daily = pd.DataFrame({ 'type': ['CHR', 'CHR', 'Kia', 'Kia', 'Kia', 'Kia'], 'state': ['NSW', 'VIC', 'NSW', 'NSW', 'NSW', 'VIC'], 'price': [1.2, np.nan, 2, np.nan, np.nan, np.nan] }) # 核心实现逻辑 df_daily['price'] = df_daily.groupby(['type', 'state'])['price'].transform( lambda x: x.fillna(x.mean()) if x.isna().sum() < 3 else x ) print(df_daily)
代码说明
- 用
groupby(['type', 'state'])完成两列联合分组,直接对price列做transform转换,若你的数据集州列名是大写State,同步修改分组参数即可 x.isna().sum()统计当前分组内price列的NaN数量,符合需求的判断条件- 三元表达式补全else分支,当NaN数量大于等于3时直接返回原列数据,保留NaN值
- 转换后的结果直接赋值给原DataFrame的price列即可完成修改
内容的提问来源于stack exchange,提问作者Amn Kh
相关产品推荐
相关产品推荐

