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

DataFrame分组聚合:求列均值与列求和的实现问题求助

解决DataFrame按年份与技术聚合:迭代均值与总发电量计算

看起来你之前的问题出在分组逻辑和聚合规则的明确性上——你需要同时按Year和Technology分组,并且给不同列指定独立的聚合规则,而不是让aggregate自动处理所有列。

先看完整解决方案

首先我们先构造你的示例数据(方便复现):

import pandas as pd

# 构造你的原始DataFrame
data = {
    'Year': [2015, 2015, 2016, 2016, 2015],
    'Iteration': [1, 1, 1, 1, 2],
    'Production': [200, 305, 150, 200, 200],
    'Technology': ['Gas', 'Gas', 'Gas', 'Gas', 'Gas']
}
df = pd.DataFrame(data)

然后执行分组聚合,完全匹配你的需求:

# 按年份+技术类型分组,分别指定聚合规则
agg_result = df.groupby(['Year', 'Technology'], as_index=False).agg(
    Iteration=('Iteration', 'mean'),  # 迭代列取均值
    Production=('Production', 'sum')  # 发电量列取总和
)

print(agg_result)

输出结果

Year Technology  Iteration  Production
0  2015        Gas        1.5         705
1  2016        Gas        1.0         350

(注:你示例里2016的Iteration写的是1.5,但你的原始数据里2016的Iteration都是1,所以实际均值是1.0,这个是符合数据逻辑的)

为什么之前的方法失败?

你提到用aggregate时会错误处理Technology列,大概率是因为:

  1. 没有把Technology加入分组键——它是你的分类维度,需要和Year一起作为分组依据,而不是被聚合的列
  2. 没有明确给每列指定聚合规则,pandas会默认对所有数值列应用相同的聚合函数,甚至尝试对非数值列做不合适的处理

通过groupby(['Year', 'Technology'])锁定分组维度,再用agg()给每列单独指定mean/sum,就能精准实现你要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:19:01