如何对Pandas DataFrame的相同类别分组并提取指定列的极值
解决方法
这需求用Pandas的分组聚合功能就能完美实现,我给你最直接的代码方案:
首先,我们可以利用groupby按class字段分组,然后对top列取最小值、bot列取最大值,最后重置索引让结果符合你的目标格式:
import pandas as pd # 初始化你的原始DataFrame df = pd.DataFrame( { "class": ["a","a","b","b","b","c","c","c","c","c","c"], "top": [5.1,6.9,12.1,14.2,16,2.1,2.9,3.8,4.5,5,6.1], "bot": [5.8,7.1,13.8,15.9,16.7,2.8,3.5,4.1,4.9,5.5,7] } ) # 核心分组聚合逻辑 result_df = df.groupby('class').agg( {'top': 'min', 'bot': 'max'} ).reset_index() # 查看结果 print(result_df)
代码解释
groupby('class'):将整个DataFrame按照class列的不同值分成若干组(a组、b组、c组)。agg({'top': 'min', 'bot': 'max'}):对每个分组指定聚合规则——top列取该组的最小值,bot列取该组的最大值。reset_index():把原本作为索引的class列重新变回普通数据列,同时生成新的连续索引,和你想要的目标结果结构完全匹配。
运行这段代码后,输出结果就是你需要的:
| 索引 | class | top | bot |
|---|---|---|---|
| 0 | a | 5.1 | 7.1 |
| 1 | b | 12.1 | 16.7 |
| 2 | c | 2.1 | 7.0 |
内容的提问来源于stack exchange,提问作者user026
相关产品推荐
相关产品推荐

