框架迭代:效率

2024-09-28 22:47:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个独立的数据集

数据集1:已加载项及其加载时间的数据库。看起来像这样 Loaded DataSet

数据集2:已卸载项及其卸载时间的数据库。它与上面的数据集完全相似

hse时间格式为“2016-01-07 19:38:56”,即“YYYY-mm-dd HH:mm:SS”

现在我的练习是用相应的卸载时间、装载次数和卸载次数、当前状态[装载或卸载]标记每个装载的项目

数据集具有以下规则:

  1. 一个项目可以多次加载和卸载。你知道吗
  2. 由于这是针对特定的时间范围,我们可以在数据集加载之前卸载项目[例如:我正在分析JFM'16的数据它可能在2015年12月之前加载,但在2016年1月卸载)

  3. 加载次数=卸载次数

  4. 装载次数=卸载次数+1

现在我已经编写了一个算法来满足所有条件,并标记我需要的所有内容,但问题是我有一个400K的数据集,我的算法需要永远运行,因为我必须迭代加载帧中的每一行。你知道吗

有没有其他方法可以减少我的运行时间?你知道吗

这是我的密码:

Loaded_Frame     = Loaded_Frame.sort_values(by=["BranchID","hse_time"],ascending=True)
Unloaded_Frame   = Unloaded_Frame.sort_values(by["BranchID","hse_time"],ascending=True)
Grouped          = Loaded_Frame.groupby(["BranchID","Item Name"]).agg({"weight":"count"}).reset_index()
Grouped.rename(columns={"weight":"LoadedCount"},inplace=True)
temp_frame       = Unloaded_Frame.groupby(["BranchID","Item Name"]).agg({"weight":"count"}).reset_index()
temp_frame.rename(columns={"weight":"UnLoadedCount"},inplace=True)
Grouped          = Grouped.merge(temp_frame,on=["BranchID","Item Name"],how="outer")
Grouped["UnLoadedCount"] = Grouped["UnLoadedCount"].fillna(0)
Grouped["LoadedCount"]   = Grouped["LoadedCount"].fillna(0)

主要逻辑

import numpy as np
Final_Frame=Loaded_Frame.copy()
Final_Frame["Multiple Loads"]=np.nan
Final_Frame["Number of times Loaded"]=np.nan
Final_Frame["Number of times UnLoaded"]=np.nan
Final_Frame["UnLoaded Date"]=np.nan
Final_Frame["Load Status"]=np.nan

for i in Grouped.index:
   x=UnLoaded_Frame[(UnLoaded_Frame["BranchID"]==Grouped.loc[i,"BranchID"])\
                 & (UnLoaded_Frame["Item Name"]==Grouped.loc[i,"Item Name"])].reset_index()
y=Loaded_Frame[(Loaded_Frame["BranchID"]==Grouped.loc[i,"BranchID"]) \
               & (Loaded_Frame["Item Name"]==Grouped.loc[i,"Item Name"])].reset_index()
Loaded_Count=y["BranchID"].count()
Unloaded-Count=x["BranchID"].count()

if Loaded_Count==Unloaded: #Condition where both are equal
    Multiple_Load=False
    if Loaded_Count>1:
        Multiple_Load=True
    else:
        Multiple_Load=False
    for j in y.index:
    Final_Frame.loc[((Final_Frame["BranchID"]==y.loc[j,"BranchID"]) \
                     & (Final_Frame["Item Name"]==y.loc[j,"Item Name"]) \
                     & (Final_Frame["hse_time"]==y.loc[j,"hse_time"]))\
                    ,["Multiple Loads","Number of times Loaded","Number of times UnLoaded","UnLoaded Date","Load Status"]]\
    =[Multiple_Load,Loaded_Count,UnLoaded_Count,x.loc[j,"hse_time"],"Unloaded"]

问题是,当我运行这段代码时,需要花费大量时间来迭代40万条记录。你知道吗


Tags: 数据nameindex时间item次数frameloc