Pandas 如何插入或填充汽车品牌的缺失价格值?

Pandas how to interpolate or fillna missing price values for car makes?

我正在使用此 automobile dataset,但我不确定使用哪种方法来填充缺失的价格值。由于价格是主观的,这甚至值得担心吗?

只删除这些行是否更好?

我想我可以计算每个特定品牌的平均价格并用它填充 - 这会给我一个足够接近的缺失值插值吗?

distinctNullMakes = automobile.loc[automobile.Price.isna() , 'Make'].unique()

for make in distinctNullMakes:
    mask = automobile.Make == make 
    mean = round(automobile.Price[mask].mean())
    automobile[mask] = automobile[mask].fillna(mean)

另外这段代码看起来不是很优雅,有没有更好的方法(我是菜鸟)?

关于用平均分数或中位数分数替换缺失的问题,需要进行整个讨论(想想公司的净资产并加上来自亚马逊的 Jeff Bazos,它会移动均值而不是中位数) .

完成讨论并确定均值后,如何以更整洁的 Python 方式进行操作?这是在下面的一行函数中完成的,它按顺序做了五件事。

Groupby + Apply + Lambda + Fillna + Mean

automobile['Price']=automobile.groupby('Make')['Price'].apply(lambda x:x.fillna(x.mean()))

尽管实现了与上面相同的效果,但它有点短。它所做的主要事情是删除 make 的循环并隐式地允许 pandas 的代码对结果进行向量化。

如果您想按多个项目分组(如 'make' 和 'body type'),请将 groupby('Make') 更改为 groupby(['Make','BodyType')