Как классифицировать и отображать табличные данные в пандах - PullRequest
1 голос
/ 19 сентября 2019

У меня есть набор табличных данных, которые я импортировал в кадр данных pandas.В каждой строке записывается конкретное событие, которое произошло с конкретным человеком, а также дата события и куча прямо сейчас посторонней информации.Может быть несколько событий на человека в день.Идентификатор «Персона» является уникальным.

events = {'Date': ['1-12-2018', '1-18-2018', '2-12-2019', etc], 
        'Person': ['Bob','Bob','Joe','Frank']} 

Я хочу построить линейный график, показывающий количество ежемесячных событий, с каждым человеком в отдельной строке.Я также хочу рассчитать среднее число событий на человека.

Для начала я подумал, что может быть немного проще, если я сделаю отдельный столбец месяц-год:

events['MY']=events.Date.dt.strftime('%Y-%m')

Я легко могу сделать то, что я хочу сделать для одного человека:

bob = events.loc[events['Person']=='Bob']
%Plots bob's monthly event count:
bob.MY.groupby(bob.MY).count().plot()
%Calculates bob's average monthly event count
bob.MY.groupby(bob.MY).count().mean()

Однако я не могу понять, как сделать это для нескольких людей, и я чувствую, что на самом деле не приближаюсь к этомулучший способ, либо.Если я пытаюсь перебрать людей и нанести на график каждую из них в виде отдельной линии, это приводит к перекручиванию оси x на графике.Я могу зацикливаться на людях и получать среднее количество ежемесячных событий, но, похоже, должен быть простой способ сделать то, чего мне не хватает.

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете попробовать:

# monthly event count
event_counts = events.pivot_table(index='MY', columns='Person', aggfunc='count')

# plot monthly count:
ax = event_counts.plot()

# plot mean:
event_counts.mean(axis=1).plot()

# if you want to plot mean along personal counts
event_counts.mean(axis=1).plot(ax=ax, label='mean')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...