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

如何在Pandas GroupBy中同时获取两个Series的最小与最大值?

如何在Pandas GroupBy中同时获取多列的最小和最大值

当然可以!而且有比逐个获取更简洁高效的方法,不用手动循环处理每个分组。我给你几种实用的方案:

首先先确认示例数据(方便复现):

import pandas as pd
df = pd.DataFrame({'a': [10,20,3,40,55], 'b': [5,14,8,50,60], 'c': ['x','x','y','y','y']})

方法1:使用agg()一次性聚合(推荐)

这是Pandas中处理多列多聚合操作的标准方式,代码简洁且性能最优(向量化操作,比循环快很多)。

方式A:统一对所有列应用min和max

如果想同时获取a和b列的最小、最大值,可以直接给agg()传入聚合函数列表:

result = df.groupby('c').agg(['min', 'max'])
print(result)

输出结果是多层列索引的DataFrame,清晰展示每个列的聚合结果:

a       b    
  min max min max
c                
x  10  20   5  14
y   3  55   8  60

方式B:自定义聚合结果的列名

如果觉得多层索引不够直观,可以通过关键字参数自定义列名,让结果更易读:

result = df.groupby('c').agg(
    a_min=('a', 'min'),
    a_max=('a', 'max'),
    b_min=('b', 'min'),
    b_max=('b', 'max')
)
print(result)

输出结果会是扁平化的列名:

a_min  a_max  b_min  b_max
c                            
x     10     20      5     14
y      3     55      8     60

方法2:在循环中批量获取(适合自定义分组处理场景)

如果确实需要保留循环遍历分组的逻辑,也可以在每个分组中一次性提取多列的最值,不用单独调用多次min()/max():

g = df.groupby('c')
for key, group in g:
    print(f"=== 分组 {key} ===")
    # 一次性获取a、b列的min和max
    stats = {
        'a_min': group['a'].min(),
        'a_max': group['a'].max(),
        'b_min': group['b'].min(),
        'b_max': group['b'].max()
    }
    print(stats)

输出结果:

=== 分组 x ===
{'a_min': 10, 'a_max': 20, 'b_min': 5, 'b_max': 14}
=== 分组 y ===
{'a_min': 3, 'a_max': 55, 'b_min': 8, 'b_max': 60}

总结一下,优先使用agg()方法,它不仅代码更简洁,在处理大数据集时的性能也远优于循环遍历。如果有特殊的分组内自定义逻辑,再考虑循环的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:48:03