Группу по дате нельзя отсортировать в пандах?

Это код:

Узнайте, сколько пользователей отправили в любой день. Его нужно отсортировать от самого последнего к старому.

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'].Как заставить работать по задумке?

Вы можете показать файл dataset.txt? Несколько строк будут вам полезны.

CezarySzulc 10.09.2018 10:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю, что нужно преобразовать значения в дату и время с помощью параметра parse_dates в read_csv и, при необходимости, добавить также параметр 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()

Это решило проблему, но она кажется возрастающей, и если я перейду на значение False, она не изменится?

user10319541 10.09.2018 10:18

@ user10319541 - В данных выборки 10/7/2018 - это 10 July 2018, и он должен быть первым?

jezrael 10.09.2018 10:20

Сначала должно быть показано самое последнее - 10.08.2018 г. Теперь в первой строке находится июль.

user10319541 10.09.2018 10:22

Другие вопросы по теме