按特定顺序排序(情况:pandas DataFrame Groupby) [英] Sort by certain order (Situation: pandas DataFrame Groupby)

查看:631
本文介绍了按特定顺序排序(情况:pandas DataFrame Groupby)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想更改以下代码显示的订购日期.
我想要的是顺序(周一,周二,周三,周四,周五,周六,周日)的结果
-我应该说,按键以某些预定义的顺序排序吗?

I want to change the day of order presented by below code.
What I want is a result with the order (Mon, Tue, Wed, Thu, Fri, Sat, Sun)
- should I say, sort by key in certain predefined order?

这是我的代码,需要进行一些调整:

Here is my code which needs some tweak:

f8 = df_toy_indoor2.groupby(['device_id', 'day'])['dwell_time'].sum()

print(f8)

当前结果:

device_id                         day
device_112                        Thu     436518
                                  Wed     636451
                                  Fri     770307
                                  Tue     792066
                                  Mon     826862
                                  Sat     953503
                                  Sun    1019298
device_223                        Mon    2534895
                                  Thu    2857429
                                  Tue    3303173
                                  Fri    3548178
                                  Wed    3822616
                                  Sun    4213633
                                  Sat    4475221

所需结果:

device_id                         day
device_112                        Mon     826862  
                                  Tue     792066
                                  Wed     636451 
                                  Thu     436518
                                  Fri     770307
                                  Sat     953503
                                  Sun    1019298
device_223                        Mon    2534895
                                  Tue    3303173
                                  Wed    3822616
                                  Thu    2857429
                                  Fri    3548178
                                  Sat    4475221
                                  Sun    4213633


在这里,type(df_toy_indoor2.groupby(['device_id', 'day'])['dwell_time'])是类'pandas.core.groupby.SeriesGroupBy'.


Here, type(df_toy_indoor2.groupby(['device_id', 'day'])['dwell_time']) is a class 'pandas.core.groupby.SeriesGroupBy'.

我找到了.sort_values(),但是它是一个内置的按值排序的函数.
我想获得一些指针来设置一些顺序,以使用它进行进一步的数据处理.
预先感谢.

I have found .sort_values() , but it is a built-in sort function by values.
I want to get some pointers to set some order to use it further data manipulation.
Thanks in advance.

推荐答案

花了我一些时间,但我找到了解决方案. 重新索引可以做什么你要.参见我的代码示例:

Took me some time, but I found the solution. reindex does what you want. See my code example:

a = [1, 2] * 2 + [2, 1] * 3 + [1, 2]
b = ['Mon', 'Wed', 'Thu', 'Fri'] * 3
c = list(range(12))
df = pd.DataFrame(data=[a,b,c]).T
df.columns = ['device', 'day', 'value']
df = df.groupby(['device', 'day']).sum()

给予:

            value
device day       
1      Fri      7
       Mon      0
       Thu     12
       Wed     14
2      Fri     14
       Mon     12
       Thu      6
       Wed      1

然后重新索引:

df.reindex(['Mon', 'Wed', 'Thu', 'Fri'], level='day')

或更方便地(归功于burhan)

or more conveniently (credits to burhan)

df.reindex(list(calendar.day_abbr), level='day')

给予:

            value
device day       
1      Mon      0
       Wed     14
       Thu     12
       Fri      7
2      Mon     12
       Wed      1
       Thu      6
       Fri     14

这篇关于按特定顺序排序(情况:pandas DataFrame Groupby)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆