Skip to main content
 首页 » 编程设计

python pandas groupby 聚合与最小函数

2025年05月04日19linjiqin

我有一个像这样的数据框:

df = pd.DataFrame({'year': [2018, 2018, 2018, 2018, 2018, 2018, 2019, 2019, 2019, 2019, 2019, 2019], 
                   'label': ['A', 'B', 'C', 'A', 'B', 'D', 'A', 'E', 'F', 'G', 'E', 'E'], 
                   'cat' : [236, 546, 671, 555, 871, 229, 811, 992, 227, 341, 701, 508], 
                   'value': [2, 5, 6, 1, 9, 4, 7, 8, 13, 11, 3, 12]}) 

我想按 year 和 label 对它进行分组,并为每个分组返回具有 value 最低值的行。该行必须包括(原始)索引值以及所有列(来自 df)。

所以,结果应该是这样的:

 3  2018  A  555   1 
 1  2018  B  546   5 
 2  2018  C  671   6 
 5  2018  D  229   4 
 6  2019  A  811   7 
10  2019  E  701   3 
 8  2019  F  227  13 
 9  2019  G  341  11 

到目前为止我的代码:

df.groupby(by=['year', 'label']).min().reset_index() 

value 的值正确,但 cat 的值不正确。还缺少(原始)索引。

有什么解决办法吗?

请您参考如下方法:

你可以用 idxmin() 来做:

df.loc[df.groupby(['year','label']).value.idxmin()] 

输出:

    year label  cat  value 
3   2018     A  555      1 
1   2018     B  546      5 
2   2018     C  671      6 
5   2018     D  229      4 
6   2019     A  811      7 
10  2019     E  701      3 
8   2019     F  227     13 
9   2019     G  341     11