Посмотрев несколько ответов здесь, я хотел бы знать, как лучше всего решить следующую проблему:
В качестве входных данных у меня есть фрейм данных, где каждая строка содержит информацию о продукте: его ссылку, рейтинг и т. Д.
На основе этой информации я создаю новый фрейм данных для каждой строки: каждый новый фрейм данных (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 и сохранения их в списке?
Я реализую оба варианта и постараюсь убедиться в этом, но если у кого-то есть информация или предложения по улучшению этого псевдокода, пожалуйста, поделитесь.