如何引用熊猫中的.agg()函数创建的列

时间:2020-10-29 12:43:00

标签: python pandas

我已经创建了使用Groupby().agg()的代码,以使新的DataFrame具有用于summeancount值的列在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()函数创建的列。

任何帮助将不胜感激。谢谢

2 个答案:

答案 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'