Это код:
Узнайте, сколько пользователей отправили в любой день. Его нужно отсортировать от самого последнего к старому.
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']
.Как заставить работать по задумке?
Я считаю, что нужно преобразовать значения в дату и время с помощью параметра 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/7/2018
- это 10 July 2018
, и он должен быть первым?
Сначала должно быть показано самое последнее - 10.08.2018 г. Теперь в первой строке находится июль.
Вы можете показать файл dataset.txt? Несколько строк будут вам полезны.