【问题标题】:Slicing pandas multiindex dataframe using max of second level使用第二级的最大值对 pandas 多索引数据帧进行切片
【发布时间】:2021-04-09 15:39:32
【问题描述】:

假设我有这个名为 df 的 MultiIndex 数据框:

     |     |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
...

【问题讨论】:

    标签: python pandas multi-index


    【解决方案1】:

    您可以在第一级分组并参加第二级的最后一个,然后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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-12
      • 2014-05-02
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2018-03-12
      相关资源
      最近更新 更多