如何按国家与ESG类别计算2012-2021年ESG值的平均值?
按国家和ESG类别计算2012-2021年平均值的解决方案
问题背景
现有数据集包含10个国家、29个ESG类别(对应Series Name字段)、2012-2021年的时间序列数据,每个国家-年份-ESG类别组合都有对应的ESG Value。需求是计算每个国家下,各ESG类别在2012-2021年间的ESG值平均值。
原代码问题分析
你之前的代码:
mean_value = df.groupby('Series Name')[['Year', 'ESG Value']].mean()
存在两个核心问题:
- 仅按
Series Name分组,未加入Country Name,无法区分不同国家的同一ESG类别数据 - 对
Year列计算均值无意义,年份是离散标识字段,且该操作可能因数据类型异常导致返回inf(无穷大)结果
正确实现代码
1. 分组计算均值
按国家+ESG类别双维度分组,仅对ESG Value计算平均值:
# 分组计算均值,重置索引为普通列 mean_values = df.groupby(['Country Name', 'Series Name'])['ESG Value'].mean().reset_index()
groupby(['Country Name', 'Series Name']):确保每个分组是「某国某ESG类别」的所有年份数据['ESG Value'].mean():仅针对目标数值列计算均值,避免无效计算reset_index():将分组后的索引转为普通列,方便后续处理
2. 格式化输出结果
如果需要像示例那样输出结构化字符串,可遍历结果行:
# 遍历结果,按指定格式打印 for _, row in mean_values.iterrows(): # 保留4位小数,可根据需求调整 print(f"{row['Country Name']} - {row['Series Name']} - Year 2012~2021 - ESG mean = {row['ESG Value']:.4f}")
示例输出效果
运行后会得到类似如下的结果:
China - CO2 emissions (metric tons per capita) - Year 2012~2021 - ESG mean = X.XXXX
China - Control of Corruption: Estimate - Year 2012~2021 - ESG mean = X.XXXX
内容的提问来源于stack exchange,提问作者James Hong
相关产品推荐
相关产品推荐

