рассчитать рост месячных продаж по стране в процентах по данному датафрейму
Прошу помощи с решением интересной задачи, к которой мне не удается найти решение. Если кратко переходить к сути, то задача следующая:
- Некое предприятие продает товары покупающим из различных стран. Выяснить, в какой из них был самый большой процентный рост месячных продаж. Выяснить, сколько процентов составляет данный рост. В расчет следует брать именно те страны, в которых были ненулевые продажи в обоих этих месяцах.
Датафрейм выглядит соответственно: ( берутся два месяца - 9 и 3 месяца 2011 года )
| InvoiceNo | StockCode | Quantity | InvoiceDate | UnitPrice | CustomerID | Country | Price | Year | Month |
|---|---|---|---|---|---|---|---|---|---|
| 536365 | 85123A | 6 | 2010-12-01 08:26:00 | 2.55 | 17850 | United Kingdom | 15.30 | 2011 | 9 |
| 536365 | 71053 | 6 | 2010-12-01 08:26:00 | 3.39 | 17850 | United Kingdom | 20.34 | 2011 | 9 |
| 581587 | 23254 | 4 | 2011-12-09 12:50:00 | 4.15 | 12860 | France | 16.60 | 2011 | 9 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 581587 | 23255 | 4 | 2011-12-09 12:50:00 | 4.15 | 12860 | France | 16.60 | 2011 | 3 |
| 581587 | 22138 | 3 | 2011-12-09 12:50:00 | 4.95 | 12860 | France | 14.85 | 2011 | 3 |
| 581588 | 22380 | 9 | 2011-12-09 12:52:00 | 2.10 | 12594 | Italy | 18.90 | 2011 | 3 |
| 581588 | 22381 | 9 | 2011-12-09 12:52:00 | 2.10 | 12594 | Italy | 18.90 | 2011 | 3 |
Примерное решение данной задачи в моей голове примерно такое - по каждой из стран рассчитать количество покупок в одном из каждых месяцев и затем просчитать, насколько за эти месяца увеличилось или уменьшилось количество покупок, т.е. измерить в процентах. ( к примеру, в 3 месяце в стране Norway было совершено 10 покупок, а в 9 месяце уже 100, прирост составил 400 и так посчитать к каждой стране и вывести страну с самым большим приростом )
Возможно, мое решение к данной задаче неверно, и так же я не знаю как превратить это решение в код, поэтому я прошу вашей помощи с решением данной задачи.
мой код к задаче неверен:
months_march = purchases.loc[(purchases['Year'] == 2011) & (purchases['Month'] == 3)]
months_september = purchases.loc[(purchases['Year'] == 2011) & (purchases['Month'] == 9)]
months = months_september.append(months_march)
months['Percent'] = months['Price'].pct_change().mul(100).round(0).map(lambda x: '{0:g}'.format(x) if x==x else x)
first = months.sort_values('Percent', ascending=False)[['Country', 'Percent']]
first = first.values.tolist()
first[0]
как ответ, должно получиться что то в роде этого:
Norway, 586
Ответы (1 шт):
попробуйте примерно так (это решение не тестировалось):
(df.groupby(['Country','Year','Month'])
.agg({'Price':'sum'})
.reset_index()
.groupby(['Country','Year'])
.apply(
lambda x: x['Price']
.pct_change()
.mul(100)
.round()
.max()
).sort_values(ascending=False)
.head(1))
