我有一个函数,我的运行有点太慢了,似乎无法使其更快。我拥有57个产品和402个商店的组合。下面的函数创建以产品为索引的数据框并存储为列。目的是获取产品销售的最大数量并存储并将其分配给“ unconstraintload_df”数据帧。它似乎可以完成工作,但是要花很长时间才能完成。请问有人有加快它的想法吗?
def getmaxsaleperproduct_and_store(product,store):
return training_DS[(training_DS["Prod Code"]==product)&(training_DS["Store"]==store)]["Sold Qty"].max()
def unconstraintsales():
global unconstraintload_df
ProdCodeList = training_DS["Prod Code"].unique()
StoreNumberList = training_DS["Store"].unique()
unconstraintload_df = pd.DataFrame(index=StoreNumberList,columns=ProdCodeList)
for store in StoreNumberList:
for prod in ProdCodeList:
unconstraintload_df.loc[unconstraintload_df.index==store,prod] = getmaxsaleperproduct_and_store(prod,store)
答案 0 :(得分:0)
尝试:
unconstraintload_df = training_DS[["Store", "Prod Code", "Sold Qty"]].groupby(["Store", "Prod Code"]).max().reset_index()
答案 1 :(得分:0)
考虑pivot_table
并避免嵌套循环。请记住,与使用列表,元组或字典的通用Python不同,Pandas中的聚合很少需要循环:
unconstraintload_df = pd.pivot_table(training_DS, index="Prod Code", columns="Store",
values="Sold Qty", aggfunc="max")
此外,除报告外,较宽的数据集比长格式的有用性更低。考虑使用groupby
进行长格式聚合,并避免管理超过400列:
long_agg_df = training_DS.groupby(["Prod Code", "Store"])["Sold Qty"].max()