У меня есть датафрейм, подобный следующему:
client_id order_id order_date id_medium revenues
0 Jack IML-0011101 2008-05-19 9526 69.84
1 deSys IML-0011744 2008-05-28 13868 68.32
2 deSys IML-0011744 2008-05-28 9472 9.48
3 deSys IML-0011744 2008-05-28 9526 6.86
4 Paul IML-0013360 2008-06-23 21585 37.09
5 Frank IML-0013951 2008-07-01 24539 29.61
6 Frank IML-0013951 2008-07-01 9472 10.38
7 Jack IML-0042758 2016-08-23 1190408 36.46
8 Frank IML-0094979 2017-09-29 1222195 58.24
9 madinside IML-0118214 2018-07-22 1240366 14.72
10 madinside IML-0118214 2018-07-22 1240374 9.27
11 madinside IML-0118214 2018-07-22 1240293 10.59
12 madinside IML-0118214 2018-07-22 1240377 13.76
13 madinside IML-0118214 2018-07-22 1240367 14.51
Я хотел бы знать:
сколько уникальных клиентов каждый год для каждого «диапазон доходов» , также учитывая, что если значения для order_id совпадают, я должен суммировать значения в доход . То есть, если я определю ячейки в 10 евро (10 или меньше, от 10 до 20, от 20 до 30 и т. Д.), Сколько клиентов каждый год будет в каждой ячейке?
Итак, в приведенном выше кадре данных в2008 год У меня будет 1 клиент ( Джек ) в корзине 60-70, 1 клиент ( deSys ) в корзине 80-90 (потому что он сделал 1 разовый заказ - IML-0011744 -из 3-х сред, а затем для моей мошенничества я должен сложить 68.32 + 9.48 + 6.86) и т. д.
то же самое для order_id , но в этом случаеЯ хотел бы посчитать количество заказов, которые являются уникальными в отношении года заказа и диапазона доходов.
Я думаю, я мог бы добавить столбец, который присваивает значение каждой записиэто приблизительное, основанное на желаемом диапазоне, значение выручки. Однако в этом случае я должен назначить одно и то же значение для записей, которые имеют одинаковый order_id , и назначенное значение должно учитывать сумму доходов для того же order_id .
Ожидаемый результат:
Я ожидаю две таблицы, одну для клиентов и одну для заказов, где для каждого индекса есть разные ячейки (10 или меньше, между 20 включеннымии 10 исключено, между 30 включено и 20 исключено, ...) и столбцы - это год заказа.
ОБНОВЛЕНИЕ
Продолжая работать над этим, я мог достичь частичногорезультат, с помощью этого кода:
pt = ordini.groupby(["order_id","client_id","order_date"]).agg({"revenues":"sum"}).reset_index()
om = pt.groupby(["revenues"]).agg({"client_id":"nunique","order_id":"count"}).reset_index()
binn = pd.cut(om.revenues,np.arange(0,4300,100))
om.groupby(binn)[["client_id"]].count().reset_index()
Я получаю нечто подобное:
incasso_tot id_cliente
0 (0, 100] 12891
1 (100, 200] 8730
2 (200, 300] 4525
3 (300, 400] 2264
4 (400, 500] 1190
Это должно быть хорошо, за исключением отсутствия информации о дате (то есть, чтобы увидеть значения разбиты нагод).
Кто-нибудь может мне помочь, пожалуйста?