pandas, как узнать сколько потребовалось строчек что бы сложить значения в столбце в сумме до 20?

Условие задачи: Сколько дней у ресторана было менее 20 успешных заказов?

    date      vendor_id successful_orders
39182   2019-06-06  58395   3.0
16289   2019-06-07  58395   1.0
72353   2019-06-11  58395   2.0
57402   2019-06-13  58395   2.0
60595   2019-06-15  58395   2.0
4811    2019-06-17  58395   2.0
41577   2019-06-18  58395   2.0
89448   2019-06-19  58395   2.0
91519   2019-06-20  58395   1.0
25444   2019-06-21  58395   1.0
7956    2019-06-23  58395   1.0
47692   2019-06-24  58395   1.0
30362   2019-06-26  58395   3.0
11791   2019-06-28  58395   1.0
61300   2019-06-29  58395   1.0
47651   2019-06-30  58395   1.0
46090   2019-07-01  58395   4.0
50288   2019-07-02  58395   2.0
55434   2019-07-03  58395   2.0
74493   2019-07-05  58395   4.0

Как мне складывать столбец только до тех пор пока не будет нужной суммы, а потом вывести сколько на это потребовалось строчек?


Ответы (2 шт):

Автор решения: s3rgK

Судя по условию задачи ("Сколько дней у ресторана было менее 20 успешных заказов?"), вам не нужно складывать значения в столбце, а нужно узнать количество значений в столбце, которые меньше 20.

lst = []
for i in df['successful_orders']:
    if i < 20:
        lst.append(i)
len(lst)
→ Ссылка
Автор решения: Alexey Trukhanov

Считаем cumsum, делаем фильтр по всем получившимся значениям, которые меньше заданного лимита, суммируем значения True.

(df.successful_orders.cumsum()) < 20).sum()

UPD Спасибо Алексей Р за подсказку в комментариях. Применение метода .lt() вместо сравнения дает экономию во времени исполнения кода около 30%. Вот окончательное решение:

df.successful_orders.cumsum().lt(20).sum()
→ Ссылка