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

Pandas分组求最值报错:'list'对象无'max'属性及需求实现

问题解决:Pandas 获取候选人年度最高得票与总得票

错误原因

你写的代码DF.loc[DF.groupby(['name', 'election_year'],['votes'].max())]语法逻辑错误:groupby的第二个参数是轴参数(0/1),你把列名列表['votes']直接跟在分组键后面并链式调用.max(),相当于对列表['votes']调用.max(),自然会触发AttributeError: 'list' object has no attribute 'max'。

正确实现步骤

先构造你的样例数据用于测试:

import pandas as pd

data = {
    'votes': [20, 30, 40, 20, 40, 40],
    'name': ['Mark Smith', 'Mark Smith', 'Mark Smith', 'John Key', 'John Key', 'John Key'],
    'election_year': [2020, 2020, 2022, 2000, 2000, 2022]
}
DF = pd.DataFrame(data)

1. 计算每位候选人各年度最高得票数

按name和election_year分组,对votes字段取最大值:

yearly_max = DF.groupby(['name', 'election_year'])['votes'].max().reset_index()

输出结果:

nameelection_yearvotes
0John Key200040
1John Key202240
2Mark Smith202030
3Mark Smith202240

2. 计算每位候选人总得票数

按name分组对votes字段求和:

total_votes = DF.groupby('name')['votes'].sum().reset_index().rename(columns={'votes': 'total_votes'})

输出结果:

nametotal_votes
0John Key100
1Mark Smith90

3. 合并结果得到最终数据

用merge将年度最高得票与总得票关联:

final_result = pd.merge(yearly_max, total_votes, on='name')

最终输出:

nameelection_yearvotestotal_votes
0John Key200040100
1John Key202240100
2Mark Smith20203090
3Mark Smith20224090

简化一步写法

也可以用groupby的agg方法结合transform直接处理:

DF['total_votes'] = DF.groupby('name')['votes'].transform('sum')
final_result = DF.groupby(['name', 'election_year']).agg(
    votes_max=('votes', 'max'), 
    total_votes=('total_votes', 'first')
).reset_index()

结果与上述一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:07:45