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

Pandas按年份聚合数值列,计算单行总和与均值的实现方法

问题描述

我有如下结构的DataFrame,希望按Year聚合所有数值列,计算这些列合并后的总和与均值。但使用mortality_wide.groupby('Year').agg(['mean', 'sum'])得到的结果是每个数值列单独的均值和总和,不符合需求,请问该如何实现?

DataFrame结构:

Year    01-04 Years 05-09 Years 10-14 Years 15-19 Years
0   1900    0.019838    0.004661    0.002983    0.004848
1   1901    0.016950    0.004276    0.002736    0.004544
2   1902    0.016557    0.004033    0.002525    0.004215
3   1903    0.015421    0.004147    0.002682    0.004341
4   1904    0.015915    0.004250    0.003052    0.004714
... ... ... ... ... ...
114 2014    0.000240    0.000115    0.000140    0.000455
115 2015    0.000249    0.000117    0.000146    0.000483
116 2016    0.000253    0.000122    0.000146    0.000512
117 2017    0.000243    0.000116    0.000155    0.000515
118 2018    0.000240    0.000115    0.000149    0.000492
# 共119行 × 5列

当前代码运行结果(不符合需求):

01-04 Years        05-09 Years        10-14 Years        15-19 Years
                mean      sum        mean      sum        mean      sum        mean      sum
Year                                                                                
1900        0.019838  0.019838    0.004661  0.004661    0.002983  0.002983    0.004848  0.004848
1901        0.016950  0.016950    0.004276  0.004276    0.002736  0.002736    0.004544  0.004544
...              ...       ...         ...       ...         ...       ...         ...       ...
2018        0.000240  0.000240    0.000115  0.000115    0.000149  0.000149    0.000492  0.000492
解决方案

你需要先将宽格式DataFrame转换为长格式,把所有年龄组的数值合并到同一列后,再按Year聚合计算总和与均值,以下是两种可行方法:

方法1:使用melt转换格式

melt方法可以将指定列作为标识列,其余列转换为键值对形式:

# 转换为长格式:Year为标识列,其余列转为Age_Group和Mortality列
mortality_long = mortality_wide.melt(
    id_vars='Year', 
    var_name='Age_Group', 
    value_name='Mortality'
)

# 按Year分组,计算合并后数值的总和与均值
result = mortality_long.groupby('Year')['Mortality'].agg(['sum', 'mean'])

方法2:使用stack转换格式

通过设置索引后堆叠列,也能实现宽转长:

# 将Year设为索引,堆叠所有数值列
mortality_stacked = mortality_wide.set_index('Year').stack().reset_index(name='Mortality')

# 按Year聚合计算统计值
result = mortality_stacked.groupby('Year')['Mortality'].agg(['sum', 'mean'])

结果说明

转换后再聚合的结果会是每个Year对应一行,包含所有年龄组数值的总和(sum)与均值(mean),例如:

sum      mean
Year                     
1900   0.032330  0.008082
1901   0.028506  0.007126
...         ...       ...
2018   0.000996  0.000249

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:55:40