Использование pandas более эффективно, чем использование цикла for

Предположим, мы сканируем данные о продуктах бизнеса электронной коммерции, таких как одежда, обувь, книги, мобильные телефоны, компьютеры и т. д. Мы хотим знать, какие продукты в этих данных упали в цене и как действовать? Мы можем использовать библиотеку pandas, чтобы отфильтровать его.

Как показано на рисунке ниже, это данные о продукте веб-сайта электронной коммерции:

Данные о товарах сканируются один раз в день, всего сотни тысяч данных. Теперь есть некоторые продукты, которые упали в цене, нам нужно найти эти продукты со сниженной ценой.

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

Установите библиотеку pandas

pip  install pandas

pandas используют внутреннюю технологию SIMD для оптимизации параллельных вычислений, и мы делаем это без использования циклов for.

Для простоты предположим, что снижение цены означает, что сегодняшняя цена ниже вчерашней, независимо от первого повышения цены, а затем снижения цены.

Чтобы исправить это, нам нужно использовать метод pct_change() в DataFrame. Это похоже на reduce, учитывая ряд данных, он вычисляет процентное изменение данных — второе изменение относительно первых данных, третье изменение данных относительно второго изменения данных, четвертое изменение данных. изменение части данных относительно третьей части данных.

Сначала мы сортируем данные по полю даты, чтобы убедиться, что цены отсортированы по времени. Затем сгруппируйте идентификаторы продуктов, чтобы получить ежедневную цену каждого продукта. Затем используйте pct_change() в поле цена:

df2['pct']=df2.sort_values(['date','id']).groupby(['id']).price.pct_change()

Мы отфильтровываем товары с процентом менее 0 на 16 мая 2022 г.:

Это товары со скидкой. Мы можем отфильтровать продукт случайным образом, чтобы проверить:

Использование pct_change() выполняется очень быстро, и сотни тысяч данных теряются почти за секунды. Гораздо быстрее, чем цикл for.

Ссылки на панд:



pandas.core.groupby.DataFrameGroupBy.pct_change — документация по pandas 1.4.2
Редактировать описаниеpandas.pydata.org



Спасибо, что прочитали!

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Посетите наш Community Discord и присоединитесь к нашему Коллективу талантов.