Альтернатива для ускорения Python для цикла с объединениями - PullRequest
0 голосов
/ 01 февраля 2019

Я работаю с большим фреймом данных (около 7 мил записей) и мне нужно перебрать некоторые значения по уникальному подмножеству этого.Скажем, мой исходный фрейм данных "df" содержит столбцы user_id, name, address, date и product, тогда как мой поднабор фреймов данных "s" (который в действительности составляет около 30 тыс. Строк) представляет собой список уникальных продуктов в "df".

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

Я пробовал цикл (см. код ниже), однако есть около 30 тыс. итераций, которые из моего обзора времени приведут к вычислению в течение 48-55 часов.Кроме того, чтобы попробовать вышеупомянутый сводный код, который просто сбой Python.Я также пытался использовать списки и функции, но производительность увеличивается незначительно, без реального смысла.

Цикл, который у меня есть:

out = []
for s in product :

 o = pd.DataFrame(df["name"].loc[df["product_code"] == s])
 c = pd.merge(df, o, on="name")

 d = c.loc[c['product_code']!=i]

 product_cts = d.groupby('item_code') ['name'].count().sort_values(ascending=False).reset_index(name ='product_counts')

 product_cts["cross_prob"] = product_cts["product_counts"]/len(o)
 product_cts["origin_product"] = s

 out.append(product_cts)

Любые идеи о том, как реорганизовать этоили увеличить производительность?

...