Анализ ежемесячной продажи в python - PullRequest
0 голосов
/ 27 января 2020

У меня есть такой набор данных

  order_status  created_at
0    cancelled  05/08/2018
1    cancelled  06/08/2018
2   dispatched  27/08/2018
3   dispatched  30/08/2018
4    cancelled  05/09/2018
5   dispatched  05/09/2018
6   dispatched  25/09/2018
7    cancelled  23/10/2018
8   dispatched  05/10/2018
9   dispatched  02/08/2018

, где формат даты - дд / мм / гг. Я хочу проанализировать данные на основе месяца, например, сколько заказов было отменено в 8-м месяце года, сколько было отправлено в 9-м месяце года. Я делаю что-то вроде

df2 = df[['order_status','created_at']].\
         set_index('created_at').\
         resample('M')
df2.iplot(kind='bar', xTitle='Date', yTitle='Order Status',
    title='Monthly Order Status')

, но выдает ошибку

TypeError: Допустимо только для DatetimeIndex, TimedeltaIndex или PeriodIndex, но получило экземпляр Index

что я могу сделать, чтобы получить ежемесячный отчет обо всех заказах?

Ответы [ 2 ]

1 голос
/ 27 января 2020

Вы можете использовать groupby:

df['created_at'] = pd.to_datetime(df['created_at'])    
f = df.groupby(df.created_at.dt.month)['order_status'].value_counts().reset_index(name='count')

      created_at order_status  count
0           2   dispatched      1
1           5    cancelled      2
2           5   dispatched      2
3           6    cancelled      1
4           8   dispatched      2
5           9   dispatched      1
6          10    cancelled      1

# plot
f.plot(kind='bar')

enter image description here

0 голосов
/ 27 января 2020

Вы можете использовать pandas.datetime методы для получения че месяца от даты.

df['month'] = df['created_at'].map(lambda x: x.month)

После этого с помощью value_counts вы можете посчитать, сколько заказов отменено или отправлено следующим образом:

df[df['dispatched']=='cancelled']['month'].value_counts()

Надеюсь, это поможет.

NB :

Если у вас разные годы в вашей дате, вы можете использовать некоторые математические манипуляции для получения информации как года, так и месяца:

df['year_month'] = df['created_at'].map(lambda x: 100*x.year + x.month)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...