如何通过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 |
|---|---|
| 2000 | B |
| 2005 | B |
方法二:保留所有并列最高的政党(适合有并列的场景)
如果存在多个政党在同一年份得票相同且都是最高值,上面的方法只会返回第一个出现的政党。用下面的方法可以保留所有并列的政党:
# 先完成分组求和并重置索引 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
相关产品推荐
相关产品推荐

