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

如何通过groupby获取各选举年份得票最高的政党数据

获取各选举年份得票最高的政党

你已经完成了最关键的一步——按年份和政党汇总得票,接下来只需要在每个年份组里筛选出得票最高的政党就行,我给你两种实用的方法:

方法一:快速获取首个最高得票政党(适合无并列的场景)

首先先完成你已有的分组求和操作,建议重置索引让结构更清晰:

# 按年份和政党汇总得票,重置索引为普通列
df_total = df.groupby(['Election Yr.', 'Party'])['Votes'].sum().reset_index()

然后按年份分组,找到每组中得票最高的行的索引,再提取对应的年份和政党:

# 获取每个年份得票最高的政党
top_parties = df_total.loc[
    df_total.groupby('Election Yr.')['Votes'].idxmax(),
    ['Election Yr.', 'Party']
]

运行后你会得到这样的结果:

Election Yr.Party
2000B
2005B

方法二:保留所有并列最高的政党(适合有并列的场景)

如果存在多个政党在同一年份得票相同且都是最高值,上面的方法只会返回第一个出现的政党。用下面的方法可以保留所有并列的政党:

# 先完成分组求和并重置索引
df_total = df.groupby(['Election Yr.', 'Party'])['Votes'].sum().reset_index()
# 计算每个年份的最高得票数,添加为新列
df_total['year_max_vote'] = df_total.groupby('Election Yr.')['Votes'].transform('max')
# 筛选出得票数等于当年最高得票的政党
top_parties = df_total[df_total['Votes'] == df_total['year_max_vote']][['Election Yr.', 'Party']]

举个例子:如果2000年政党A和B的总票数都是90,这个方法会把两个政党都列出来。

补充说明

  • 你最初的代码df = df.groupby(['Election Yr.', 'Party']).sum()会把所有数值列求和(这里只有Votes),但建议显式指定['Votes']列,避免后续新增列时出现意外。
  • 两种方法都可以直接在多级索引的DataFrame上操作,但重置索引后代码可读性更高,更适合调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:17:46