首页 文章

Pandas中groupby方法的'level'参数如何工作?

提问于
浏览
1
(df.set_index('STNAME').groupby(level=0)['CENSUS2010POP']
   .agg({'avg': np.average, 'sum': np.sum}))

在上面的代码中,为什么有必要在groupby中指定level参数,因为根据我的理解,只有在DataFrame中有multiIndex时才需要level参数 .

1 回答

  • 2

    不仅 MultiIndex ,它也应该在 Index 中使用,因为只有一个级别 .

    对于具有指定的聚合列的函数agg也是必需的元组传递列表,用于指定具有聚合函数的新列的名称:

    df1 = (df.groupby('STNAME')['CENSUS2010POP']
             .agg({'avg': np.average, 'sum': np.sum}))
    

    FutureWarning:在系列中使用dict进行聚合已弃用,将在以后的版本中删除.agg({'avg':np.average,'sum':np.sum}))


    但是你的代码应该更简单:

    df = pd.DataFrame({'STNAME':list('aab'),
                       'CENSUS2010POP':[10,20,50]})
    
    df1 = (df.groupby('STNAME')['CENSUS2010POP']
             .agg([('avg', np.average), ('sum', np.sum)]))
    print (df1)
            avg  sum
    STNAME          
    a        15   30
    b        50   50
    

    另外如果确实需要从 STNAME 列创建索引或者已经在last versions的pandas(0.20)中的DataFrame中工作:

    (df.set_index('STNAME').groupby('STNAME')['CENSUS2010POP']
       .agg([('avg', np.average), ('sum', np.sum)]))
    

相关问题