Оптимизация итерации по фрейму данных pandas - PullRequest
0 голосов
/ 28 июня 2018

Я создавал словарь (с именем data), используя два столбца Data Frame (с именем sales_product), используя «Sales Ord Id» (имя столбца) в качестве ключа, а затем вставлял соответствующий «Prod ID» (имя столбца) для сопоставления списка ключей в словаре. Но выполнение этой программы занимает почти 6 часов, поэтому любой может предложить любой способ ускорить этот процесс.

ID = []             #ID list
items = []
data = {}
for i in range(len(sales_product)):
    curr_id = sales_product['Sales Ord Id'][i] 
    if curr_id not in ID:
        ID.append(curr_id)
        data[curr_id]=[]
        data[curr_id].append(sales_product['Prod ID'][i])
    else:   
        if sales_product['Prod ID'][i] not in data[curr_id]:
            data[curr_id].append(sales_product['Prod ID'][i])

1 Ответ

0 голосов
/ 28 июня 2018

Вы должны попробовать использовать панд groupby . Он группирует данные информационного кадра по значениям столбца и позволяет работать с этими группами. Это должно работать быстрее.

import pandas as pd

sales_product = pd.DataFrame({'Sales Ord Id': [1, 2, 1, 2, 1, 2, 1, 2, 1, 2],
                              'Prod ID': [11, 12, 13, 14, 15, 16, 17, 18, 19, 10]})

groupby = sales_product.groupby('Sales Ord Id')
data = dict([(x, list(d['Prod ID'])) for x, d in groupby])
print(data)
# prints {1: [11, 13, 15, 17, 19], 2: [12, 14, 16, 18, 10]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...