使用第二级的最大值对熊猫多索引数据帧进行切片



假设我有一个名为df:的多索引数据帧

|     |Value
Year |Month|  
1992 |  1  |  3
|  2  |  5
|  3  |  8
-----------------
1993 |  1  |  2
|  2  |  7
----------------
1994 |  1  |  20
|  2  |  50
|  3  |  10
|  4  |  5

如何选择所有年份和每个年份的最大月份?

我想要以下结果:

|     |Value
Year |Month|  
1992 |  3  |  8 
-----------------
1993 |  2  |  7     
----------------
1994 |  4  |  5

我试过使用

df.loc[(slice(None), [3, 2, 4]),:]

这是有效的,但它是硬编码的。如何将其设置为始终保持最大月份级别,而不是手动设置?

我的索引是排序的,所以它将是每年的最后一个月。

我也尝试过使用.iloc,但它不适用于多索引

>>> df.iloc[(slice(None), -1),:]
...
IndexingError: Too many indexers
...

您可以在第一个级别上分组,然后在第二个级别的最后一个级别上进行df.loc[]:

df.loc[pd.DataFrame.from_records(df.index).groupby(0)[1].last().items()]

Value
Year Month       
1992 3          8
1993 2          7
1994 4          5

最新更新