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

Python:如何在DataFrame分组中选取最大值(支持并列多选)

如何按州和民调机构分组筛选得票率最高的党派(支持并列)

问题描述

需要按**州(State)和民调机构(Pollster)**分组,筛选出每组内得票率最高的党派(Party),支持并列情况(即多个党派得票率相同时全部保留)。

示例数据

import pandas as pd

data = {'State': ['Texas','Texas','Texas','Texas',
          'New York','New York',
          'Pennsylvania','Pennsylvania','Pennsylvania',
          'Pennsylvania','Pennsylvania','Pennsylvania'],
'Pollster': ['Chuck Norris','Chuck Norris','Mike Jones','Mike Jones',
             'Sterling Cooper','Sterling Cooper',
             'Yinz','Yinz','Yinz','Wawa','Wawa','Wawa'],
'Party': ['Thems','RIPs','Thems','RIPs',
          'Thems','RIPs',
          'Thems','RIPs','LIBOR',
          'Thems','RIPs','LIBOR'],
'Percentage of Vote' : [0.45, 0.55, 0.43, 0.57,
                        .99,.01,
                        .5,.5,0,
                        1/3,1/3,1/3]}

df = pd.DataFrame(data)

原始数据预览

State         Pollster        Party  Percentage of Vote
      0 Texas         Chuck Norris    Thems  0.450000
      1 Texas         Chuck Norris    RIPs   0.550000
      2 Texas         Mike Jones      Thems  0.430000
      3 Texas         Mike Jones      RIPs   0.570000
      4 New York      Sterling Cooper Thems  0.990000
      5 New York      Sterling Cooper RIPs   0.010000
      6 Pennsylvania  Yinz            Thems  0.500000
      7 Pennsylvania  Yinz            RIPs   0.500000
      8 Pennsylvania  Yinz            LIBOR  0.000000
      9 Pennsylvania  Wawa            Thems  0.333333
     10 Pennsylvania  Wawa            RIPs   0.333333
     11 Pennsylvania  Wawa            LIBOR  0.333333

期望输出

State         Pollster        Party  Percentage of Vote
      1 Texas         Chuck Norris    RIPs   0.550000
      3 Texas         Mike Jones      RIPs   0.570000
      4 New York      Sterling Cooper Thems  0.990000
      6 Pennsylvania  Yinz            Thems  0.500000
      7 Pennsylvania  Yinz            RIPs   0.500000
      9 Pennsylvania  Wawa            Thems  0.333333
     10 Pennsylvania  Wawa            RIPs   0.333333
     11 Pennsylvania  Wawa            LIBOR  0.333333

解决方案

以下两种方法均可实现需求,自动处理并列场景:

方法一:用transform匹配组内最大值

# 按州和民调机构分组,计算每组的最高得票率
max_vote = df.groupby(['State', 'Pollster'])['Percentage of Vote'].transform('max')

# 筛选出得票率等于组内最大值的行
result = df[df['Percentage of Vote'] == max_vote]

print(result)

方法二:用groupby结合自定义筛选函数

def filter_max(group):
    return group[group['Percentage of Vote'] == group['Percentage of Vote'].max()]

result = df.groupby(['State', 'Pollster']).apply(filter_max).reset_index(drop=True)

print(result)

两种方法都会保留所有得票率等于组内最大值的行,完美适配并列情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:50:20