熊猫,对超级日期/系列中的分组系列进行分类/排序

时间:2018-07-18 00:04:47

标签: python pandas

对于如何描述不知所措。我有一个数据集,我想按日期时间顺序保存,但是不知何故小时值变得混乱,我也希望它按升序排列,即1,2,3。...我尝试了df.group([ 'XX','hour'])。sort_by('hour');并使用.groupby()。size('hour')。在不分解XX值的情况下看不到该怎么做。

我现在所拥有的...

id ## datetime ## hour ##  XX ##     YY

0     2018/01/01  2       chairs      5  
1     2018/01/01  1       chairs      3
2     2018/01/01  3       chairs      6
3     2018/01/01  3       tables      7
4     2018/01/01  1       tables      9 
5     2018/01/01  2       tables      2
6     2018/01/02  2       chairs      2
7     2018/01/02  1       chairs      3
8     2018/01/02  3       chairs      6
9     2018/01/02  2       tables      2
10    2018/01/02  3       tables      3
11    2018/01/02  1       tables      5

我一直追求的目标...

id ## datetime ## hour ##  XX ##     YY

0     2018/01/01  1       chairs      3  
1     2018/01/01  2       chairs      5
2     2018/01/01  3       chairs      6
3     2018/01/01  1       tables      9
4     2018/01/01  2       tables      2 
5     2018/01/01  3       tables      7
6     2018/01/02  1       chairs      3
7     2018/01/02  2       chairs      2
8     2018/01/02  3       chairs      6
9     2018/01/02  1       tables      5
10    2018/01/02  2       tables      2
11    2018/01/02  3       tables      3

为时髦的图表表示歉意,对您的帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

您可以先使用cumcount,然后使用sort_values

创建一个帮助键。
new_df=df.assign(helperkey=df.groupby('hour').cumcount()).sort_values(['datetime','helperkey','hour'])
new_df
Out[524]: 
    id    datetime  hour      XX  YY  helperkey
1    1  2018/01/01     1  chairs   3          0
0    0  2018/01/01     2  chairs   5          0
2    2  2018/01/01     3  chairs   6          0
4    4  2018/01/01     1  tables   9          1
5    5  2018/01/01     2  tables   2          1
3    3  2018/01/01     3  tables   7          1
7    7  2018/01/02     1  chairs   3          2
6    6  2018/01/02     2  chairs   2          2
8    8  2018/01/02     3  chairs   6          2
11  11  2018/01/02     1  tables   5          3
9    9  2018/01/02     2  tables   2          3
10  10  2018/01/02     3  tables   3          3