我已经创建了使用Groupby()
和.agg()
的代码,以使新的DataFrame具有用于sum
,mean
和count
值的列在Total
中。
test = df.groupby('Sector').agg({'Total': ['sum', 'mean', 'count']})
此代码已起作用,并在必要时产生了结果。
但是在尝试使用sort_values()
对sum
列进行降序排序时。我遇到问题了。
test.sort_values('sum', axis="columns", ascending = False, inplace = True)
它将给我输出:
KeyError: 'sum'
我似乎找不到一种方法来引用由.agg()
函数创建的列。
任何帮助将不胜感激。谢谢
答案 0 :(得分:1)
在Total
之后添加groupby
列,以避免列中的MultiIndex
,第二个问题需要sorting
index
的默认值,因此应将其删除:
test = df.groupby('Sector')['Total'].agg(['sum', 'mean', 'count'])
#if use inplace=True cannot assign values
test.sort_values('sum', ascending = False, inplace = True)
print (test)
#if omitted, you need assign
test = test.sort_values('sum', ascending = False)
print (test)
或者如果需要named aggregations中的自定义列名称:
test = df.groupby('Sector').agg(sum1=('Total','sum'),
avg=('Total','mean'),
size=('Total','count'))
test.sort_values('sum1', ascending = False, inplace = True)
print (test)
答案 1 :(得分:0)
使用test.columns
查看列名。然后在sort_values
中使用所需的列。
您遇到的问题是multindex列。重命名它们。
test.columns = ["sum", "mean", "count"]
或在sort_values中使用multindex
列名
.sort_values(('Total', 'sum'), ascending = False, inplace = True) #without axis='columns'