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

如何高效计算DataFrame分组后众数对应列的最大值?

高效实现按A分组统计B列众数及对应D列最大值

嘿,我来帮你搞定这个大数据量下的效率问题!你之前用for循环处理第三列确实会在数据量大的时候拖慢速度,咱们换成pandas的向量式分组聚合操作,完全避免循环,速度会快很多。

先明确你的需求

给定原始DataFrame:

ABCD
axr1
axs2
ayr1
bwt4
bzv2

需要按A分组后输出:

  • A:分组键
  • freq of most common value in Column B:B列众数的出现次数
  • maximum of column D based on the most common value in Column B:B列众数对应的D列最大值
  • most common value in Column B:B列的众数

高效实现步骤

核心思路是先一次性统计每个(A,B)组合的频率和对应D的最大值,再筛选出每个A组内频率最高的B值,全程用pandas内置的分组操作,没有Python循环:

  1. 按(A,B)分组,计算频率和D的最大值
    用groupby.agg一次性完成两个统计量的计算,避免多次分组:

    import pandas as pd
    
    # 先构造你的示例数据
    df = pd.DataFrame({
        'A': ['a', 'a', 'a', 'b', 'b'],
        'B': ['x', 'x', 'y', 'w', 'z'],
        'C': ['r', 's', 'r', 't', 'v'],
        'D': [1, 2, 1, 4, 2]
    })
    
    # 按A和B分组,计算B的出现次数(freq)和对应D的最大值(max_D)
    grouped_stats = df.groupby(['A', 'B'], sort=False).agg(
        freq=('B', 'size'),  # 统计每个(A,B)组合的出现次数
        max_D=('D', 'max')   # 统计每个(A,B)组合对应的D列最大值
    ).reset_index()
    
  2. 筛选每个A组内的B列众数
    对每个A组,按freq降序排序,取第一行(也就是频率最高的B值,即众数):

    # 按A分组,筛选出每个组内freq最大的行(若有多个众数,取第一个出现的)
    result = grouped_stats.sort_values(
        by=['A', 'freq'], 
        ascending=[True, False]  # A升序,freq降序
    ).groupby('A').head(1)
    
  3. 调整列名和顺序,匹配需求格式
    最后重命名列并调整顺序,得到你要的输出:

    # 重命名列
    result = result.rename(columns={
        'freq': 'freq of most common value in Column B',
        'max_D': 'maximum of column D based on the most common value in Column B',
        'B': 'most common value in Column B'
    })
    
    # 调整列的顺序
    result = result[[
        'A', 
        'freq of most common value in Column B', 
        'maximum of column D based on the most common value in Column B', 
        'most common value in Column B'
    ]]
    
    print(result)
    

输出结果

运行后得到的结果完全符合你的需求:

Afreq of most common value in Column Bmaximum of column D based on the most common value in Column Bmost common value in Column B
a22x
b14w

为什么这个方法高效?

所有操作都是pandas底层优化的向量式操作,避免了Python层面的循环(比如你之前用的for循环),大数据量下能充分利用pandas的C扩展加速,速度会比循环快几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:48:14