You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas groupby分组后计算均值结果不符合预期如何解决

问题原因

结果异常由两个问题共同导致:

  • 分组字段不全:你的统计目标是特定区域、特定年份、特定户型的租金均值,但groupby仅传入了town和quarter,漏掉了flat_type维度,会把同区域同年份所有户型的租金混算,不符合统计需求。
  • median_rent列类型错误:这是出现e14级别异常值的核心原因。正常2000-3000区间的数值求均值不可能得到万亿级别的结果,说明该列没有被解析为数值类型(int/float),基本是数据读入环节出了问题:要么列里混了千分位逗号、货币符号、空格这类非数字脏字符,要么分隔符识别错误把其他列的长ID、时间戳串到了租金列,pandas做隐式转换时把这些内容转成了超大数值。
修正方法
  1. 先做数据校验,确认列类型和实际值:
# 打印各列类型,确认median_rent是不是object类型
print(df.dtypes)
# 打印租金列的实际存储值,确认是否和你看到的2250/2300一致
print(df['median_rent'].head(20))
  1. 清洗租金列,转为正确的数值类型:
# 移除租金列里所有非数字、非小数点的字符,再转成浮点型
df['median_rent'] = (
    df['median_rent']
    .astype(str)
    .str.replace(r'[^0-9.]', '', regex=True)
    .astype(float)
)
  1. 补全分组维度后计算均值:
# 按区域、年份、户型三个维度分组求均值
rent_mean = df.groupby(["town", "quarter", "flat_type"])['median_rent'].mean()
print(rent_mean)

如果不想看到科学计数法的显示格式,在代码最开头加一行配置即可:

import pandas as pd
# 强制浮点数显示两位小数,不用科学计数法
pd.set_option('display.float_format', '{:.2f}'.format)

修正后你提到的2011年CLEMENTI 4-RM户型的计算结果会是预期的2312.5,不会再出现异常值。

内容的提问来源于stack exchange,提问作者bonijad383

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:45:39