Оптимизация итерации по строке над фреймом данных - PullRequest
0 голосов
/ 03 июня 2019

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

На основе этой информации я создаю новый фрейм данных для каждой строки: каждый новый фрейм данных (1 продукт (1 строка из исходного фрейма данных) = 1 фрейм данных) содержит новое количество строк на основе информации в строке: например, если значение столбца «TYPE» равно «A», новый фрейм данных будет иметь 10 строк, каждая из которых соответствует определенной дате. Эта информация важна в том смысле, что я применяю не только сложную формулу, но и функцию с условиями и различными сценариями (а не просто последовательность операций).

В настоящее время я делаю следующее:

for index, row in original_df.iterrows():
    product_ref = row[REF]
    ...
    new_df = function(product_ref,...)
    res.append(new_df)
return pandas.concat(res)

Из того, что я собрал в документации Pandas и нескольких ответах, это один из худших возможных способов работы в Pandas.

Я могу преобразовать iterrows в itertuples, что должно повысить производительность, так как я не буду строить Series, а вместо этого получит имя Tuples.

Другое решение было бы также применить мою функцию так:

res = original_df.apply(function,axis=1)

, который будет возвращать Серию фреймов данных (поскольку мой function возвращает фрейм данных).

Каков предпочтительный способ (как и в том, как он будет работать лучше всего) между применением функции, дающей сложный результат (объект dataframe), и итерацией по именованным кортежам для создания dataframes и сохранения их в списке?

Я реализую оба варианта и постараюсь убедиться в этом, но если у кого-то есть информация или предложения по улучшению этого псевдокода, пожалуйста, поделитесь.

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