假设我有一个名为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