使用Pandas按mes与estacao分组计算月度城市平均温度出错求助
解决Pandas按月份+城市分组计算月均温并赋值新列的问题
问题分析
你当前的代码存在两个核心问题:
- 分组列的索引方式错误:
df2['mes', 'estacao']这种写法仅适用于**多级列名(MultiIndex)**的场景,而你的数据集列名是普通字符串,应该用列表形式指定分组列。 - 直接赋值分组均值会导致索引对齐失败:
groupby(...).mean()返回的是分组后的聚合结果(行数远少于原DataFrame),直接赋值给新列会因为索引不匹配,造成大量NaN或者数据错位。
正确实现代码
# 按月份(mes)和城市(estacao)分组,用transform广播均值到每一行 df2['avg_temp_ar_mensal'] = df2.groupby(['mes', 'estacao'])['temp_ar'].transform('mean')
代码说明
groupby(['mes', 'estacao']):明确指定按mes和estacao两个维度分组,确保每个城市每个月的均值独立计算。transform('mean'):将分组计算出的均值,填充到该分组对应的每一行中,保持原DataFrame的行数和索引完全对齐,避免赋值时的索引错位问题。
对比错误写法的问题
- 错误写法1:
df2['temp_ar'].groupby(df2['mes', 'estacao']).mean()
这里的df2['mes', 'estacao']会被解析为尝试获取列名为('mes', 'estacao')的列,而你的数据集里没有这个列,因此直接报错。 - 错误写法2:
df2['temp_ar'].groupby(df2['mes']).mean()
仅按月份分组,会把所有城市的气温数据混在一起计算月均值,无法区分不同城市,导致结果不符合需求。
内容的提问来源于stack exchange,提问作者Ossevaolep
相关产品推荐
相关产品推荐

