Как ускорить цикл for в фрейме данных pandas

#python #dictionary #for-loop #subtraction

#python #словарь #for-цикл #вычитание

Вопрос:

Мне нужно преобразовать цикл for в набор функций, которые будут быстрее перебирать данные. Он циклически перебирает фрейм данных и вычитает значения. Я думал о сопоставлении фрейма данных, но для меня это не самая понятная концепция, и я мог бы воспользоваться любой предлагаемой помощью.

 for nd in wnkd['days'].unique():
    for ld in lps['level'].unique():
        nmrtr = []
        for ty in types:
            try:
                nmrtr.append((sum(wnkd.loc[(wnkd['level']== ld) amp; (wnkd['typs'] == ty) amp; (wnkd['data_set'] == 'rules'),'FRQ'].values)-(
                            sum(wnkd.loc[(wnkd['level']== ld) amp; (wnkd['typs']== ty ) amp; (wnkd['data_set'] == 'actual'), 'FRQ']))))
            except (KeyError,IndexError) as e:
                nmrtr.append(0)
        print(nmrtr,ld)
        nmrtr.append(ld)
        nmrtr.append(nd)
 

Попытка / исключение на месте, потому что, если значения не существуют в этом разделе цикла for, они могут попасть в другой раздел. Например, когда ld равно 3, а тип — car, может не быть никаких значений, но может быть значение, когда ld равно 4, а тип — car. Цель состоит в том, чтобы циклически просматривать каждый раздел данных по дате недели (nd), затем по уровню (ld), затем по типу (ty), чтобы сравнить значения из 2 разных наборов данных. FRQ ссылается на частоту, которая была сгенерирована путем группировки исходных наборов данных. Также обратите внимание, что только потому, что actual имеет nd = 3/1 , level = 4 и type = car , это не означает, что правила будут иметь один и тот же тип. Правила будут иметь один и тот же nd и уровень, но тип может отличаться. Я решаю выяснить, как часто меняются типы.

Комментарии:

1. При использовании map всегда существует соответствие 1 к 1 между входными и выходными элементами. Но ваш цикл добавляет несколько элементов на каждой итерации, поэтому вы не можете использовать map() .

2. Внутри вычитается 2 значения, разве это не 1 к 1? Я не уверен, что мне нужно изменить, чтобы он соответствовал. Мне просто действительно нужно ускорить этот цикл.

3. Я говорю обо всех вызовах nmrtr.append() . Вы вызываете его несколько раз на каждой итерации.

4. map() это не ускорит его значительно.

5. Это словари или серия pandas?