Как получить среднее количество транзакций в группах groupby?

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных транзакции с показателями продаж для McDonalds и KFC

        month       shop  transaction_value
0    January  McDonalds                  5
1    January        KFC                  1
2    January        KFC                 34
3    January        KFC                 12
4   February  McDonalds                 23
5   February  McDonalds                 45
6   February        KFC                 23
7   February        KFC                 56
8      March  McDonalds                 45
9      March  McDonalds                  3
10     March        KFC                  2
11     March        KFC                  1
12     March        KFC                  1
  

Я хочу получить среднее count количество транзакций в месяц для каждого магазина.

Я зашел так далеко, группируя по магазинам и месяцам:

 df.groupby([df.shop,df.month])['transaction_value'].count()


shop       month   
KFC        February    2
           January     3
           March       3
McDonalds  February    2
           January     1
           March       2
  

Что мне нужно, так это то, каково среднее count количество транзакций в месяц для McDonalds и KFC? Я могу посмотреть на вышесказанное и сказать, что в McDonalds в среднем совершается 1,66 транзакций в месяц, а в KFC — 2,66 транзакций в месяц.

Но как я могу вычислить эту информацию в pandas?

Я попытался получить среднее значение groupby:

 df.groupby([df.shop,df.month])['transaction_value'].count().mean()
  

Но это дает общее представление обо всем. Он возвращает одно число.

Я пытаюсь получить что-то вроде этого:

 shop       average number of transactions per month
KFC        2.66
McDonalds  1.66
  

Вероятно, это что-то простое для добавления в groupby, но я не могу понять это.

Мой фрейм данных, чтобы вы могли использовать datafarme.from_dict() :

 {'month': {0: 'January',
  1: 'January',
  2: 'January',
  3: 'January',
  4: 'February',
  5: 'February',
  6: 'February',
  7: 'February',
  8: 'March',
  9: 'March',
  10: 'March',
  11: 'March',
  12: 'March'},
 'shop': {0: 'McDonalds',
  1: 'KFC',
  2: 'KFC',
  3: 'KFC',
  4: 'McDonalds',
  5: 'McDonalds',
  6: 'KFC',
  7: 'KFC',
  8: 'McDonalds',
  9: 'McDonalds',
  10: 'KFC',
  11: 'KFC',
  12: 'KFC'},
 'transaction_value': {0: 5,
  1: 1,
  2: 34,
  3: 12,
  4: 23,
  5: 45,
  6: 23,
  7: 56,
  8: 45,
  9: 3,
  10: 2,
  11: 1,
  12: 1}}
  

Ответ №1:

Вы близки, нужно mean за level=0 :

 df.groupby([df.shop,df.month])['transaction_value'].count().mean(level=0)
  

Что работает так же, как:

 df.groupby([df.shop,df.month])['transaction_value'].count().groupby(level=0).mean()
  

Комментарии:

1. Это работает. Спасибо. Нужно подождать 12 минут, чтобы отметить как ответ.