#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 минут, чтобы отметить как ответ.