分组 DataFrame 以获得最大索引

Grouping DataFrame to get max index

我有一个类似于这样的数据框:

    Year    class   Sales
0   1980    1   1.10
1   1980    2   7.07
2   1980    3   8.00
3   1980    4   12.00
4   1981    1   11.20
5   1981    1   2.00
6   1981    3   4.00
7   1981    2   6.00

我希望对我的数据进行分组,以便获得 class 的年度最大销售额并获得该数据框的 class。之后我需要做什么?

data.groupby(['Year','class']).sum()
        Sales
Year    class   
1980    1   1.10
        2   7.07
        3   8.00
        4   12.00
1981    1   13.20
        2   6.00
        3   4.00

例如我希望我的输出是这样的:

       Sales
Year   class

1980   4     12.00
1981   1     13.20

我能够使用循环获得正确的输出,但我试图避免这种情况,因为它需要太多时间。

一种方法是,在您完成第一个 groupby 之后,您可以仅在年份(索引级别 = 0)上执行第二个以找到最大销售额的索引:

In [41]: d2
Out[41]: 
            Sales
Year class       
1980 1       1.10
     2       7.07
     3       8.00
     4      12.00
1981 1      13.20
     2       6.00
     3       4.00

In [42]: d2["Sales"].groupby(level=0).idxmax()
Out[42]: 
Year
1980    (1980, 4)
1981    (1981, 1)
Name: Sales, dtype: object

In [43]: d2.loc[d2["Sales"].groupby(level=0).idxmax()]
Out[43]: 
            Sales
Year class       
1980 4       12.0
1981 1       13.2