基于Pandas按水果类别替换radius列0值为对应类别均值
解决方案
步骤说明
- 构造包含
radius和fruit列的DataFrame - 按
fruit分组,计算每组排除0值后的radius均值 - 将
radius列中的0值替换为对应水果类别的均值
完整代码
import pandas as pd # 原始数据 radius = [10,2,3,0,10,2,0,12,6,10] fruits = ["apple","apple","mango","watermelon","watermelon","apple","mango","watermelon","mango","apple"] # 1. 创建DataFrame df = pd.DataFrame({'radius': radius, 'fruit': fruits}) # 2. 计算每个水果类别非0半径的均值 # 先过滤掉radius为0的行,再分组求均值 fruit_radius_mean = df[df['radius'] != 0].groupby('fruit')['radius'].mean() # 3. 替换0值为对应类别的均值 # 找到radius为0的行,用fruit匹配对应的均值 mask = df['radius'] == 0 df.loc[mask, 'radius'] = df.loc[mask, 'fruit'].map(fruit_radius_mean) # 查看处理后的结果 print(df)
输出结果
radius fruit 0 10.0 apple 1 2.0 apple 2 3.0 mango 3 11.0 watermelon 4 10.0 watermelon 5 2.0 apple 6 4.5 mango 7 12.0 watermelon 8 6.0 mango 9 10.0 apple
关键细节
- 计算均值时必须先过滤0值,避免拉低类别均值
- 使用
loc+mask的方式替换值,比逐行apply更高效,适合大数据集 fruit_radius_mean是索引为水果类别的Series,通过map可快速完成类别与均值的匹配替换
内容的提问来源于stack exchange,提问作者Varun Gowda
相关产品推荐
相关产品推荐

