У меня есть датафрейм dft
с двумя столбцами 'DATE'
и 'INVOICE'
, который выглядит следующим образом, но с гораздо большим количеством строк, охватывающих несколько лет.
DATE INVOICE
0 2015-01-29 68.61
1 2015-01-15 16.54
2 2015-01-15 4.72
3 2015-01-14 109.71
Сначала я отсортировал эти данные по INVOICE
размеру, чтобы получить три отдельных кадра данных.
small = dft[(dft['INVOICE'] < 25) &
(dft['INVOICE'] > 0)]
medium = dft[(dft['INVOICE'] <= 60) &
(dft['INVOICE'] >= 25)]
large = dft[(dft['INVOICE'] > 60)]
Затем я суммировал общие расходы по счетам в каждой категории за каждый месяц и преобразовал их в список:
periods = dft.DATE.dt.to_period("M")
small1 = small.groupby(periods).sum().reset_index()
medium1 = medium.groupby(periods).sum().reset_index()
large1 = large.groupby(periods).sum().reset_index()
# Convert Dataframes to lists for plotting
x1 = small1['DATE'].tolist()
x2 = medium1['DATE'].tolist()
x3 = large1['DATE'].tolist()
y1 = small1['INVOICE'].tolist()
y2 = medium1['INVOICE'].tolist()
y3 = large1['INVOICE'].tolist()
Чтобы, наконец, построить гистограмму с разбивкой по месяцам и годам, например, (2015-01) против совокупного размера счета за этот месяц.
Моя проблема в том, что эта гистограмма выдает ошибку, так как у списков разных размеров.
indexes = np.arange(len(x1))
p3 = plt.bar(indexes, y1 + y2 + y3)
p2 = plt.bar(indexes, y2 + y1)
p1 = plt.bar(indexes, y1)
plt.show()