【问题标题】:Sort column in Dataframe alphabetically after GroupBy在 GroupBy 之后按字母顺序对 Dataframe 中的列进行排序
【发布时间】:2021-05-09 19:33:33
【问题描述】:

我已使用 GroupBy 对数据框 data_2020 中的“金额”求和。

data_2020.groupby(['Category'])['Amount'].sum().sort_values(ascending=False)

data_2020

现在,我想按“类别”列进行排序。我曾尝试使用 sort_values(by=['Category'], inplace=True) 但现在我收到一条错误消息:

TypeError: sort_values() 得到了一个意外的关键字参数“by”

如何按“类别”列排序?

【问题讨论】:

  • .sort_index()?
  • 不,我不是这个意思。需要data_2020.groupby(['Category'])['Amount'].sum().sort_index()
  • 谢谢。您的回答与下面的回答一起帮助了我。我使用了这个脚本:data_2020.groupby(['Category'])['Amount'].sum().sort_values(ascending=False).sort_index(ascending=True)

标签: python dataframe pandas-groupby


【解决方案1】:

此声明

data_2020.groupby(['Category'])['Amount'].sum().sort_values(ascending=False)

将返回一个熊猫系列

>>> import pandas as pd
>>> 
>>> 
>>> lst = [28793.78, 6380.09, 5895.26, 324.79, 279.76, 239.62]
>>> categories = ['0', 'Amazon', 'Supermarker', 'Taxi', 'Newspapers', 'Boots']
>>> ser = pd.Series(lst, index=categories)
>>> ser.index.name = 'Category'
>>> ser
Category
0              28793.78
Amazon          6380.09
Supermarker     5895.26
Taxi             324.79
Newspapers       279.76
Boots            239.62
dtype: float64

pandas.Series.sort_values 不接受 by 参数(与 pandas.DataFrame.sort_values 不同)。


sort_index(ascending=True) 应该可以解决问题:

>>> ser.sort_index(ascending=True)
Category
0              28793.78
Amazon          6380.09
Boots            239.62
Newspapers       279.76
Supermarker     5895.26
Taxi             324.79
dtype: float64

【讨论】:

  • Gia sou Giorgo,感谢您的详细解释。它帮助我理解了 DataFrame 和 Series 的区别。我使用以下脚本解决了我的问题:data_2020.groupby(['Category'])['Amount'].sum().sort_values(ascending=False).sort_index(ascending=True)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2023-04-01
  • 2013-05-02
相关资源
最近更新 更多