WedX - журнал о программировании и компьютерных науках

Рассчитать ежемесячный отток в пандах

Это пример данных, которые у меня есть в моем кадре данных:

test = pd.DataFrame({
    'month': [1,2,3,4,5,6,7,8,9],
    'new': [23,45,67,89,12,34,56,90,12],
    'drop': [2,4,7,9,1,4,6,9,1],
})

month   new drop
0   1   23  2
1   2   45  4
2   3   67  7
3   4   89  9
4   5   12  1
5   6   34  4
6   7   56  6
7   8   90  9
8   9   12  1

Мне нужно рассчитать ежемесячный коэффициент оттока. Мне нужно суммировать 2 строки в столбце new, а затем разделить значение в drop на эту сумму (в %).

    month 1: 2*100/23
    month 2: 4*100/(23+45-2)
    month 3: 7*100/(23+45+67-2-4)

    etc.

Может ли кто-нибудь предложить элегантный способ сделать это?

25.07.2019

  • Вы хотите делать это каждые 2 строки? Или накопительно по всему кадру? 25.07.2019

Ответы:


1

Тебе нужно:

test['drop'].mul(100).div((test['new'].cumsum() - test['drop'].cumsum().shift()).fillna(test['new']))

Выход:

0    8.695652
1    6.060606
2    5.426357
3    4.265403
4    0.467290
5    1.619433
6    2.006689
7    2.349869
8    0.259067
dtype: float64

Объяснение:

(test['new'].cumsum() - test['drop'].cumsum().shift()).fillna(test['new'])

Предоставляет общую сумму new с вычитанием предыдущей общей суммы drop.

Вывод (комментарии добавлены для объяснения):

0     23.0 # 23
1     66.0 # 23+45-2
2    129.0 # 23+45+67-2-4
3    211.0
4    214.0
5    247.0
6    299.0
7    383.0
8    386.0
25.07.2019
  • Я думаю, что нам нужно .cumsum() со сдвигом, иначе в подструктурах отбрасываются числа только за предыдущий месяц... 25.07.2019
  • @aviss, я не понимаю. Разве это не дает вам желаемого результата? 25.07.2019
  • Я обновил свой вопрос другой строкой для месяца 3. Нам нужно удалить предыдущие значения из выпадающих. 25.07.2019

  • 2
    test = pd.DataFrame(
        {
            'month': [1, 2, 3, 4, 5, 6, 7, 8, 9],
            'new': [23, 45, 67, 89, 12, 34, 56, 90, 12],
            'drop': [2, 4, 7, 9, 1, 4, 6, 9, 1],
        }
    )
    df2 = test.assign(
        shifted_drop=lambda x: x['drop'].cumsum().shift(1).fillna(0.0),
        shifted_new=lambda x: x['new'].shift(1).fillna(0.0),
        churn=lambda x: x['drop'] * 100 / (x['new'] + x['shifted_new'] - x['shifted_drop'])
    )[['month', 'churn']]
    

    Результат

       month     churn
    0      1  8.695652
    1      2  6.060606
    2      3  5.426357
    3      4  4.265403
    4      5  0.467290
    5      6  1.619433
    6      7  2.006689
    7      8  2.349869
    8      9  0.259067
    

    Я проверяю результат для двух первых строк.

    25.07.2019
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]