У меня есть два фрейма данных панд с одинаковыми ключами столбца, например, 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[][]
. Что здесь происходит под капотом? Я полагаю, что это должно быть частью того, что нужно для создания фрагмента данных, вызывающего раздувание и проблемы с производительностью?