首页 > 解决方案 > 如何优化/加快迭代 Dataframe 并从另一个 Dataframe 匹配/获取数据?

问题描述

我有一些有效的代码,但我一直在寻找优化功能并使其更快的方法。当我运行此代码时,在我的计算机上完成最多可能需要 2 个小时。我正在使用两个数据框:一个大型 DF,其中包含超过 100 万行带有 SKU 编号、价格等的汽车零件;正如您在代码示例中看到的那样,我正在从具有超过 300k 行的 CSV 表中读取数据。

这是我的代码:

npw_inventory = pd.read_csv('inventory/npw.csv', low_memory=False)
count = 0

for _, row in pw.iterrows():
        if row['CS-SKU-NP'][5:] in npw_inventory['SKU'].values:
                matched_npw = npw_inventory.loc[npw_inventory['SKU'] == row['CS-SKU-NP'][5:]]
                min_qty = matched_npw['Min_order_Qty']
                core = matched_npw['Core_cost']
                row['MinPrice'] = (row['MinPrice'] + core) * min_qty
                count += 1 
print(count)

我要回答的是:1)这是最有效的方法吗?,以及 2)我怎样才能减少运行此代码所需的时间?

数据:

pw

{'WD':'A','LC':'WGL','MasterLC':307.0,'零件编号':'H6545BL','MasterSKU':'307|H6545BL','重量':2.0,'DimWeight ':2.0,'ShipWeight':2.0,'Length':7.0,'Width':5.0,'Height':5.0,'Total':27.0,'DIM':175.0,'UPC':'042723936655','Qty ':0,'CS-SKU':'AWGL|H6545BL','CS-SKU-NP':'AWGL|H6545BL','MinPrice':11.53,'Shipping':nan,'Carrier':nan,'Service ':nan,'Markup':nan,'ShipMkup':nan,'ListMkup':nan,'PackQty':1.0,'MinQty':nan,'MaxQty':nan,'邮政编码':90746.0,'CatSKU' :南,'OP-最低(Y)':南,'VND-最低(Y)':南,“MinMkDown”:南,“MaxMkUp”:南,“间隔”:南,“BundleSKU”:南,“重复”:南}

npw.csv

{'Line_code':'3MM','SKU':'00379','SKU_noDS':'00379','Stock_1':0,'Stock_11':0,'Stock_12':0,'Stock_13':0,' Stock_15':25,'Stock_16':0,'Stock_18':0,'Stock_19':0,'Stock_2':0,'Stock_3':0,'Stock_4':0,'Stock_7':0,'Stock_89' :0,“Stock_9”:0,“Stock_VIC-94”:0,“成本”:90.36,“核心成本”:0.0,“最小订单数量”:1}

基本上发生的事情是我正在运行一个 Jupyter 笔记本的脚本。它加载pw文件并对定价和运输进行各种更改。对于这个特定的部分,我将 SKUpw与 SKU 进行匹配npw_inventory以获得Core_costMin_order_Qty. 在pw我添加匹配coreMinPriceSKU 并将其乘以min_qty.

标签: pythonpandas

解决方案


推荐阅读