在熊猫数据框上优化迭代

时间:2018-06-28 07:23:11

标签: python python-3.x pandas dataframe

我正在使用“销售序号”(列名)作为键,使用两列数据框(命名为sales_product)创建一个字典(命名数据),然后插入匹配的“产品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 :(得分:0)

您应该尝试使用熊猫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]}