(df.set_index('STNAME').groupby(level=0)['CENSUS2010POP'] .agg({'avg': np.average, 'sum': np.sum}))
在上面的代码中,为什么有必要在groupby中指定level参数,因为根据我的理解,只有在DataFrame中有multiIndex时才需要level参数 .
不仅 MultiIndex ,它也应该在 Index 中使用,因为只有一个级别 .
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中工作:
STNAME
(df.set_index('STNAME').groupby('STNAME')['CENSUS2010POP'] .agg([('avg', np.average), ('sum', np.sum)]))
1 回答
不仅
MultiIndex
,它也应该在Index
中使用,因为只有一个级别 .对于具有指定的聚合列的函数agg也是必需的元组传递列表,用于指定具有聚合函数的新列的名称:
但是你的代码应该更简单:
另外如果确实需要从
STNAME
列创建索引或者已经在last versions的pandas(0.20)中的DataFrame中工作: