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

Python处理分组DataFrame:提取各州各年大选获胜党派数据

提取每组第一行的高效方案(针对美国总统选举数据集)

核心结论

完全不需要用嵌套循环,Pandas提供了两种更简洁、高效的方法直接提取每个year/state组合的获胜党派整行数据,避免循环带来的性能问题和逻辑错误。


前提准备(若未完成组内排序)

先确保数据集按「年份→州→得票数降序」排序,保证每个州当年得票最高的党派排在组内第一:

df_sorted = df.sort_values(by=['year', 'state', 'candidatevotes'], ascending=[True, True, False])

方法一:groupby + first()

通过分组后直接提取每组的第一行,自动保留整行所有字段:

df2 = df_sorted.groupby(['year', 'state'], as_index=False).first()
  • as_index=False:让year和state作为普通数据列,而非索引,最终得到306行的目标数据集。

方法二:drop_duplicates(更高效)

利用已排序的特性,直接保留每个year/state组合的第一行记录:

df2 = df_sorted.drop_duplicates(subset=['year', 'state'], keep='first')
  • 此方法无需分组操作,是性能最优的方案,尤其适合大数据集。

关于你之前的尝试

  • 你写的df.groupby(by = ['year', 'state'])['candidatevotes'].max()仅能获取最大得票数值,无法关联到对应的党派等其他字段,因此无法直接生成目标数据集。
  • 嵌套循环极易因逻辑疏漏(如重复遍历、错误的条件判断)导致行数异常,且运行效率远低于Pandas内置的向量化操作,完全不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:35:03