按日期分组不能在熊猫中排序?

时间:2018-09-10 08:11:06

标签: python pandas

这是代码:

查找每天有多少用户提交。必须将其从最新到较旧进行排序。

import pandas as pd
a=pd.read_csv("dataset.txt")
b=a[['date_su','users']]
b.sort_values(['date_su'],ascending=False).groupby(['date_su','users'])['date_su'].count()

结果是这样的:

date_su                  users
1/8/2018                Jk_28_j                         1
                        KT1w_19_MN                     33
                        KT1w_19_USER                    9
                        KT1w_19_USER2                   5
                        KT1w_19_USER3                   7
                        KT1w_19_USER32                  1
                        KT1w_19_USER35                  8
                        KT1w_19_USER36                  7
                        KT1w_19_USER8                   8
                        KT1w_19_USER9                   6
                        MRS  sffdf                      1
                        SINBAo                          1
                        VIJJHxAFNI                      1
                        W7jj24693U242                   1
                        WW2pt710U455                    1
10/7/2018               idMIa9p0c                       1
                        KTw_19_MNG1                     4
                        KTw_19_MNG2                    18
                        KTw_19_USER1                    4
                        KTw_19_USER22                   8
                        KTw_19_USER32                   7
                        KTw_19_USER33                   5
                        KTw_19_USER34                   1
                        KTw_19_USER35                   3
10/8/2018               KTw_19_MNG1                     8
                        KTw_19_USER1                    5
                        KTw_19_USER2                    2
                        KTw_19_USER3                    3

最后一行似乎不是按日期排序,而是按用户排序。尽管显示为sort_values(['date_su']。如何使其按预期工作?

1 个答案:

答案 0 :(得分:1)

我认为需要通过read_csv中的参数parse_dates将值转换为日期时间,并在必要时还添加参数dayfirst=True

b=pd.read_csv("dataset.txt", 
              parse_dates=['date_su'], 
              usecols=['date_su','users'], 
              dayfirst=True)

然后对MultiIndex进行排序:

b.groupby(['date_su','users'])['date_su'].count().sort_index(level=[0,1], ascending=[False, True])

或者将ascending=False与参数sort=False一起使用,以避免在groupby中排序:

b.sort_values(['date_su'],ascending=False).groupby(['date_su','users'], sort=False)['date_su'].count()
相关问题