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

时间:2018-12-09 06:10:46

标签: python pandas pandas-groupby data-science

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

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

1 个答案:

答案 0 :(得分: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列创建索引,或者已经在熊猫(0.20+)的last versions中的DataFrame中工作,则可以使用

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