【问题标题】:Pandas Return top N from each group in MultiIndexPandas 从 MultiIndex 中的每个组返回前 N 个
【发布时间】:2019-01-29 01:50:06
【问题描述】:

我有一个包含大约 300 万个数据点的大型多索引数据框。第一个索引是日期,第二个是对象的名称。然后,每个对象都有一个像这样的值:

df = pd.DataFrame({'year': [2012, 2012, 2012, 2013, 2013, 2013],
'item':['apples', 'metals', 'water', 'apples', 'metals', 'water'],
'value': [10, 14, 16, 17, 13, 14]})

df.set_index(['year', 'item'], inplace = True)

这是我正在使用的数据框的一个较小示例。我想返回一个保持完全相同格式的数据框,但只有每年的前两个值。

所以最终的数据框应该输出 2012 年的金属和水及其值,以及 2013 年的苹果和水及其各自的值,格式与原始数据框相同。

【问题讨论】:

    标签: pandas sorting dataframe multi-index


    【解决方案1】:

    IIUC sort_values 之前 groupby tail

    df.sort_values('value').groupby(level=0).tail(2).sort_index()
    Out[258]: 
                 value
    year item         
    2012 metals     14
         water      16
    2013 apples     17
         water      14
    

    【讨论】:

      【解决方案2】:

      申请nlargest

      pd.concat([d.nlargest(2, columns=['value']) for _, d in df.groupby('year')])
      
                   value
      year item         
      2012 water      16
           metals     14
      2013 apples     17
           water      14
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 2017-05-29
        • 2021-02-20
        • 1970-01-01
        • 2019-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多