如何按Model分组用最低Price行填充Pandas DataFrame空值?
解决方案
可以通过分组后提取每组Price最小的行,再用该行值填充组内空值来实现需求,具体步骤如下:
- 先将
Price列转换为数值类型(避免因原数据类型导致min计算错误):
import pandas as pd import numpy as np data = [[1000, 'x', 'A'], [2000,'y', 'A'], ['NaN','NaN', 'A'], ['NaN','NaN','B'], [1700,'z', 'B']] df = pd.DataFrame(data, columns=['Price', 'Attribute', 'Model' ]) df = df.replace('NaN',np.nan) # 转换Price为数值型 df['Price'] = pd.to_numeric(df['Price'])
- 按
Model分组,对每组使用Price最小的行填充空值:
# 定义填充逻辑:每组取Price最小的行,用该行值填充组内空值 filled_df = df.groupby('Model', group_keys=False).apply( lambda g: g.fillna(g.loc[g['Price'].idxmin()]) )
运行后filled_df的输出与期望一致:
Price Attribute Model 0 1000.0 x A 1 2000.0 y A 2 1000.0 x A 3 1700.0 z B 4 1700.0 z B
逻辑说明
groupby('Model', group_keys=False):按Model分组,避免分组后额外保留组键索引g.loc[g['Price'].idxmin()]:定位当前组中Price最小的行(若存在多个Price相同的最小值,取第一个出现的行)g.fillna(...):用该行的所有非空值,批量填充组内对应列的空值
内容的提问来源于stack exchange,提问作者Aayush Gupta
相关产品推荐
相关产品推荐

