Как сделать этот вид барплота, сгруппировать список транзакций в 12 групп баров? - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь визуализировать набор данных.

Вот некоторые транзакции:

transaction = [1480000.0, 1035000.0, 1465000.0, 850000.0, 1600000.0, 941000.0, 1876000.0, 1636000.0, 300000.0, 1097000.0, 700000.0, 1350000.0, 750000.0, 1172500.0, 441000.0, 1310000.0, 1200000.0, 1176500.0, 955000.0, 890000.0, 1330000.0, 900000.0, 1090000.0, 500000.0, 1100000.0, 1315000.0, 426000.0, 1447500.0, 457000.0]

Происходит:

date = ['3/12/2016', '4/02/2016', '4/03/2017', '4/03/2017', '4/06/2016', '7/05/2016', '7/05/2016', '8/10/2016', '8/10/2016', '8/10/2016', '12/11/2016', '12/11/2016', '12/11/2016', '13/08/2016', '14/05/2016', '15/10/2016', '16/07/2016', '16/07/2016', '17/09/2016', '17/09/2016', '18/03/2017', '18/03/2017', '18/03/2017', '18/06/2016', '18/06/2016', '19/11/2016', '22/08/2016', '22/08/2016', '22/08/2016']

Я пытаюсь сгруппировать этисделок в 12 группах баров, есть 2 бара 2016 и 2017 года соответственно в каждой группе

df = pd.DataFrame(np.array([transaction, date]).transpose(),
                 columns=['transaction', 'date'])
di = pd.to_datetime(df['date'])
from collections import defaultdict
tem1 = defaultdict(list)
for i in di:
    tem1['year'].append(i.year)
    tem1['month'].append(i.month)
df['year'] = tem1['year']
df['month'] = tem1['month']
bar_df = df.groupby(['month','year']).count()
bar_df.plot.bar()

и я получил это:

enter image description here

Как это исправить?

1 Ответ

0 голосов
/ 08 октября 2019

Вы можете присвоить время назад столбцу date, поэтому можно получить year с и month с на Series.dt.year Series.dt.month.

Затем для bar_df используйте GroupBy.size с Series.unstack или crosstab с rename:

df = pd.DataFrame({'transaction':transaction , 'date':date})
df['date'] = pd.to_datetime(df['date'])
#print (df)

bar_df = df.groupby([df['date'].dt.month,df['date'].dt.year]).size().unstack(fill_value=0)

Или:

bar_df = pd.crosstab(df['date'].dt.month.rename('m'),df['date'].dt.year.rename('y'))

print (bar_df)
date  2016  2017
date            
3        1     3
4        2     2
5        1     0
6        2     0
7        4     0
8        7     0
9        2     0
10       1     0
11       1     0
12       3     0

bar_df.plot.bar()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...