#python #pandas #matplotlib
#питон #панды #matplotlib
Вопрос:
У меня есть набор данных с этой формой :
>>> df
my_timestamp disease month
0 2016-01-01 15:00:00 2 jan
0 2016-01-01 11:00:00 1 jan
1 2016-01-02 15:00:00 3 jan
2 2016-01-03 15:00:00 4 jan
3 2016-01-04 15:00:00 2 jan
Я обычно подсчитываю количество уникальных появлений по месяцам, по значениям, а затем строю график каждого значения по месяцам.
количество значений df
2 января 3 января 2 3
Как я могу его отобразить? На одном графике с месяцем по оси x, одна строка для каждого значения и их количество в y
Комментарии:
1. можете ли вы попробовать это:
df.groupby('month')['disease']nunique().plot()
2. @remc пожалуйста, примите один из ответов в качестве решения, нажав на галочку рядом с моим ответом. Спасибо!
Ответ №1:
Если вы хотите построить график по месяцам, вам также необходимо построить график по годам, если несколько лет. Вы можете использовать dt.strftime
при использовании .groupby
для группировки по годам и месяцам.
Учитывая следующий слегка измененный набор данных, чтобы включить больше месяцев:
my_timestamp disease month
2016-01-01 15:00:00 2 jan
2016-02-01 11:00:00 1 feb
2017-01-02 15:00:00 3 jan
2017-01-02 15:00:00 4 jan
2016-01-04 15:00:00 2 jan
Вы можете выполнить следующее
df['my_timestamp'] = pd.to_datetime(df['my_timestamp'])
df.groupby(df['my_timestamp'].dt.strftime('%Y-%m'))['disease'].nunique().plot()
Комментарии:
1. Это работает, но возвращает количество уникальных значений, а не количество значений.
2. @remc как насчет использования
.count()
вместо.nunique()
? Вы также можете использовать.size()
. Это работает?3. да! См. мой ответ
Ответ №2:
Что я сделал, чтобы получить эти данные в barplot. Я создал колонку месяца. Затем :
for v in df.disease.unique():
diseases = df_cut[df_cut['disease']==v].groupby('month_num')['disease'].count()
x = diseases.index
y = diseases.values
plt.bar(x, y)