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列,大概率是因为:
- 没有把
Technology加入分组键——它是你的分类维度,需要和Year一起作为分组依据,而不是被聚合的列 - 没有明确给每列指定聚合规则,pandas会默认对所有数值列应用相同的聚合函数,甚至尝试对非数值列做不合适的处理
通过groupby(['Year', 'Technology'])锁定分组维度,再用agg()给每列单独指定mean/sum,就能精准实现你要的结果。
内容的提问来源于stack exchange,提问作者Henkpenk
相关产品推荐
相关产品推荐

