使用 Pandas Python 进行分组和排序
Posted
技术标签:
【中文标题】使用 Pandas Python 进行分组和排序【英文标题】:Group by and Sort with Pandas Python 【发布时间】:2017-11-29 11:48:50 【问题描述】:我已经按功能进行了分组,我想按时间顺序按月份排序,我该怎么做?目前该功能按字母顺序对月份进行排序:
func = 'Predictions':['count','mean','median']
table1 = df.groupby(['FLAG','MONTH']).agg(func)
表1
Predictions
count mean median
FLAG MONTH
0 Apr 49812 106.458209 75.325309
Aug 44514 93.718901 74.485782
Feb 51583 98.921119 74.199794
Jan 54837 100.381814 74.682187
Jul 49873 100.621877 73.233328
Jun 47950 103.688532 74.150171
Mar 52816 106.094774 75.104832
May 49404 106.847784 75.844241
Oct 41828 94.744952 76.178077
Sep 41074 96.430351 75.335261
1 Apr 83377 285.631679 144.582569
Aug 66285 217.619038 127.087037
Feb 79693 310.919925 180.507922
Jan 64730 290.113451 137.291571
Jul 105213 298.337893 146.956319
Jun 90305 312.484185 136.222903
Mar 97274 308.013477 165.752471
May 87927 310.162600 142.350688
Oct 47064 258.213619 85.445310
Sep 47337 240.361602 84.597842
感谢您的帮助!
【问题讨论】:
【参考方案1】:你可以使用reindex
:
#rewrite code for remove MultiIndex in columns
table1 = df.groupby(['FLAG','MONTH'])['Predictions'].agg(['count','mean','median'])
months = ['Jan', 'Feb', 'Mar', 'Apr','May','Jun', 'Jul', 'Aug','Sep', 'Oct', 'Nov', 'Dec']
df = table1.reindex(months, level=1)
print (df)
count mean median
FLAG MONTH
0 Jan 54837 100.381814 74.682187
Feb 51583 98.921119 74.199794
Mar 52816 106.094774 75.104832
Apr 49812 106.458209 75.325309
May 49404 106.847784 75.844241
Jun 47950 103.688532 74.150171
Jul 49873 100.621877 73.233328
Aug 44514 93.718901 74.485782
Sep 41074 96.430351 75.335261
Oct 41828 94.744952 76.178077
1 Jan 64730 290.113451 137.291571
Feb 79693 310.919925 180.507922
Mar 97274 308.013477 165.752471
Apr 83377 285.631679 144.582569
May 87927 310.162600 142.350688
Jun 90305 312.484185 136.222903
Jul 105213 298.337893 146.956319
Aug 66285 217.619038 127.087037
Sep 47337 240.361602 84.597842
Oct 47064 258.213619 85.445310
【讨论】:
那很快。我无法正确复制数据我正在准备 df 直到现在 干杯!我正在尝试将它也应用于同一个表的副本但没有 FLAG 变量,并且出现此错误: NotImplementedError: 参数级别没有为 CategoricalIndex.reindex 实现 哦,好的,找到了!再次感谢@jezrael! 不客气!如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 (✓
) 将其从灰色切换为已填充。谢谢。【参考方案2】:
正如this 问题中提到的,您可以使用以下代码来获取月份到索引的映射
import calendar
map = v: k for k,v in enumerate(calendar.month_abbr)
你可以使用索引映射来创建月份索引的新列
#create the new index
df["index"] = df["MONTH"].map(lambda x: map[x])
#groupby the new index
table1 = df.groupby(['FLAG','index']).agg(func).reset_index()
#drop the multi index
table1 = table1.reset_index()
#sort by month
table1.sort_values("index", inplace = True)
【讨论】:
以上是关于使用 Pandas Python 进行分组和排序的主要内容,如果未能解决你的问题,请参考以下文章
快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]