Используйте groupby
, count
и unstack
для настройки кадра данных:
df2 = df.groupby(['Date', 'Kind'])['Kind'].count().unstack('Kind').fillna(0)
Затем повторно сэмплируйте кадр данных и суммируйте счет за каждый день. Это также добавит все пропущенные дни, отсутствующие в кадре данных (как указано). Затем настройте индекс, чтобы сохранить только часть даты.
df2 = df2.resample('D').sum()
df2.index = df2.index.date
Теперь выведите график данных с помощью stacked=True
:
df2.plot(kind='bar', stacked=True)

В качестве альтернативы, функция plt.bar()
может использоваться для окончательного построения:
cols = df['Kind'].unique() # Find all original values in the column
ind = range(len(df2))
p1 = plt.bar(ind, df2[cols[0]])
p2 = plt.bar(ind, df2[cols[1]], bottom=df2[cols[0]])
Здесь необходимо установить аргумент bottom
каждой части равным сумме всех частей, которые были до этого.