如何在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
相关产品推荐
相关产品推荐

