Pandas: как нарисовать гистограмму по месяцам по подсчетам

У меня есть кадр данных df, как показано ниже:

Student_id   Date_of_visit(d/m/y)
1            1/4/2020
1            30/12/2019
1            26/12/2019
2            3/1/2021
2            10/1/2021
3            4/5/2020
3            22/8/2020

Как я могу получить гистограмму с x-axis в качестве месяца-года (например: y-метки: декабрь 2019 г., январь 2020 г., февраль 2020 г.) и y-axis - общее количество студентов (количество), посещенных в определенный месяц.


person NPyak    schedule 09.03.2021    source источник


Ответы (1)


Преобразуйте значения в дату и время, затем используйте DataFrame.resample с Resampler.size для подсчета создайте новый формат даты и времени с помощью DatetimeIndex.strftime:

df['Date_of_visit'] = pd.to_datetime(df['Date_of_visit'], dayfirst=True)

s = df.resample('M', on='Date_of_visit')['Student_id'].size()

s.index = s.index.strftime('%b %Y')

print (s)
Date_of_visit
Dec 2019    2
Jan 2020    0
Feb 2020    0
Mar 2020    0
Apr 2020    1
May 2020    1
Jun 2020    0
Jul 2020    0
Aug 2020    1
Sep 2020    0
Oct 2020    0
Nov 2020    0
Dec 2020    0
Jan 2021    2
Name: Student_id, dtype: int64

Если нужно подсчитать только уникальные Student_id, используйте Resampler.nunique:

s = df.resample('M', on='Date_of_visit')['Student_id'].nunique()

s.index = s.index.strftime('%b %Y')

print (s)
Date_of_visit
Dec 2019    1
Jan 2020    0
Feb 2020    0
Mar 2020    0
Apr 2020    1
May 2020    1
Jun 2020    0
Jul 2020    0
Aug 2020    1
Sep 2020    0
Oct 2020    0
Nov 2020    0
Dec 2020    0
Jan 2021    1
Name: Student_id, dtype: int64

Последний график Series.plot.bar

s.plot.bar()
person jezrael    schedule 09.03.2021