Самый быстрый способ перебрать столбцы данных панд в соответствии с ненулевыми записями другого кадра данных? - PullRequest
2 голосов
/ 28 июня 2019

У меня есть два фрейма данных панд с одинаковыми ключами столбца, например, df1, df2. Столбцы df1 являются временными рядами, тогда как записи df2 относятся к линейным комбинациям записей df1 в день, заданный индексом (не очень важно для логики).

Я хочу сделать следующее: для каждого ненулевого элемента ввода в df2 с позицией, например, [день, «ключ»], вычислить

df1["key"]*df2[day,"key"]+x 

где x - некоторый предопределенный вектор.

Мне интересно, какой самый быстрый способ сделать это. Я не очень хорошо знаком с операциями векторизации в Python, и мой инстинкт Фортрана использовать простые циклы явно ужасен для производительности.

Я хочу сделать это как можно быстрее: это будет выполнено, скорее всего, 10 ^ 5/10 ^ 6 раз, и таблицы будут примерно 1000 на 1000, поэтому наивные циклы невыносимо медленны.

    for day in df1.index:

        for key in df2.loc[day].nonzero():

            df1[key]*df2.at[day,key]+x

Быстрее ли преобразовывать кадры данных в массив и индекс с помощью индекса ключей в df.columns? Я обнаружил значительное ускорение, просто используя df.at[] против df.loc[][]. Что здесь происходит под капотом? Я полагаю, что это должно быть частью того, что нужно для создания фрагмента данных, вызывающего раздувание и проблемы с производительностью?

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