我有一个按列、行、年、总额分组的大型数据集.我正在try 获取某个组中某一年的"合计"栏的最大值.即,对于下面的数据集:

col      row    year    potveg  total

-125.0  42.5    2015    9       697.3
                2015    13      535.2
                2015    15      82.3
                2016    9       907.8
                2016    13      137.6
                2016    15      268.4
                2017    9       961.9
                2017    13      74.2
                2017    15      248.0
                2018    9       937.9
                2018    13      575.6
                2018    15      215.5
-135.0  70.5    2015    8       697.3
                2015    10      535.2
                2015    19      82.3
                2016    8       907.8
                2016    10      137.6
                2016    19      268.4
                2017    8       961.9
                2017    10      74.2
                2017    19      248.0
                2018    8       937.9
                2018    10      575.6
                2018    19      215.5

我希望输出如下所示:

col      row    year    potveg  total

-125.0  42.5    2015    9       697.3
                2016    9       907.8
                2017    9       961.9
                2018    9       937.9
-135.0  70.5    2015    8       697.3
                2016    8       907.8
                2017    8       961.9
                2018    8       937.9

我试过这个:

df.groupby(['col', 'row', 'year', 'potveg']).agg({'total': 'max'})

还有这个:

df.groupby(['col', 'row', 'year', 'potveg'])['total'].max()

但它们似乎不起作用,因为输出的行数太多. 我认为问题出在‘potveg’栏目,它是一个子组.我不确定如何 Select 包含最大值‘Total’的行.

推荐答案

一种可能的解决方案是,在groupby.apply中使用.idxmax():

print(
    df.groupby(["col", "row", "year"], as_index=False, sort=False).apply(
        lambda x: x.loc[x["total"].idxmax()]
    )
)

打印:

     col   row    year  potveg  total
0 -125.0  42.5  2015.0     9.0  697.3
1 -125.0  42.5  2016.0     9.0  907.8
2 -125.0  42.5  2017.0     9.0  961.9
3 -125.0  42.5  2018.0     9.0  937.9
4 -135.0  70.5  2015.0     8.0  697.3
5 -135.0  70.5  2016.0     8.0  907.8
6 -135.0  70.5  2017.0     8.0  961.9
7 -135.0  70.5  2018.0     8.0  937.9

使用的DataFrame:

       col   row  year potveg  total
0   -125.0  42.5  2015      9  697.3
1   -125.0  42.5  2015     13  535.2
2   -125.0  42.5  2015     15   82.3
3   -125.0  42.5  2016      9  907.8
4   -125.0  42.5  2016     13  137.6
5   -125.0  42.5  2016     15  268.4
6   -125.0  42.5  2017      9  961.9
7   -125.0  42.5  2017     13   74.2
8   -125.0  42.5  2017     15  248.0
9   -125.0  42.5  2018      9  937.9
10  -125.0  42.5  2018     13  575.6
11  -125.0  42.5  2018     15  215.5
12  -135.0  70.5  2015      8  697.3
13  -135.0  70.5  2015     10  535.2
14  -135.0  70.5  2015     19   82.3
15  -135.0  70.5  2016      8  907.8
16  -135.0  70.5  2016     10  137.6
17  -135.0  70.5  2016     19  268.4
18  -135.0  70.5  2017      8  961.9
19  -135.0  70.5  2017     10   74.2
20  -135.0  70.5  2017     19  248.0
21  -135.0  70.5  2018      8  937.9
22  -135.0  70.5  2018     10  575.6
23  -135.0  70.5  2018     19  215.5

Python相关问答推荐

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何让剧作家等待Python中出现特定cookie(然后返回它)?

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

将输入管道传输到正在运行的Python脚本中

ODE集成中如何终止solve_ivp的无限运行

计算每个IP的平均值

在Django admin中自动完成相关字段筛选

改进大型数据集的框架性能

Python Pandas获取层次路径直到顶层管理

dask无groupby(ddf. agg([min,max])?''''

如何删除重复的文字翻拍?

使用Python异步地持久跟踪用户输入

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

如何过滤组s最大和最小行使用`transform`'

语法错误:文档. evaluate:表达式不是合法表达式

如何在Airflow执行日期中保留日期并将时间转换为00:00

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

Django.core.exceptions.SynchronousOnlyOperation您不能从异步上下文中调用它-请使用线程或SYNC_TO_ASYNC

Pandas:计数器的滚动和,复位

设置索引值每隔17行左右更改的索引