Как вырезать значения в диапазоне и посчитать, сколько существует случаев для любого диапазона? - PullRequest
1 голос
/ 10 октября 2019

У меня есть датафрейм, подобный следующему:

   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

Это должно быть хорошо, за исключением отсутствия информации о дате (то есть, чтобы увидеть значения разбиты нагод).

Кто-нибудь может мне помочь, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...