使用熊猫时,如何加快for循环的速度?

时间:2020-06-17 16:50:13

标签: python pandas

令人讨厌的是,我曾经写过工作代码。假定只需要运行一次。但是现在您必须经常运行它。不幸的是,由于会议线,无法提供源数据。我对这个问题感兴趣,为了获得性能,需要更正代码的哪些部分?当前版本运行约2小时,运行约25K迭代。

dfs = []
for x in tqdm_notebook(range(len(group_furn))):

    good_id = group_furn.iloc[x, 0]

    name_promo = group_furn.iloc[x, 1]

    unique_stores = set(stores.loc[stores.store_type_id != 4]['store_id'].unique()) - \
    set(promo_list.loc[(promo_list['good_id'] == good_id) & \
                       (promo_list['name_promo_mech'] == name_promo)].store_id.unique())

    bu_stores = list(unique_stores.intersection(set(bu_furn.store_id.unique())))

    main_stores = bu_store.loc[(bu_store.store_id.isin(bu_stores)) & (bu_store.store_type_id != 4)].main_store_id.unique()

    df = promo_list.loc[(promo_list.good_id == good_id) & (promo_list.name_promo_mech == name_promo) & 
                         (promo_list.store_id.isin(main_stores))]
    bu = bu_store.loc[bu_store.main_store_id.isin(main_stores)]

    df = pd.merge(df, bu, how='inner', left_on='store_id', right_on='main_store_id')

    dfs.append(df)

    main_stores = bu_store.loc[(bu_store.store_id.isin(bu_stores)) & (bu_store.store_type_id == 4)].main_store_id.unique()

    owners = bu_store.loc[bu_store.main_store_id.isin(main_stores)].main_owner_id.unique()

    df_2 = promo_list.loc[(promo_list.good_id == good_id) & (promo_list.name_promo_mech == name_promo) & 
                         (promo_list.owner_id.isin(owners))]
    bu = bu_store.loc[bu_store.main_store_id.isin(main_stores)]

    df_2 = pd.merge(df_2, bu, how='inner', left_on='store_id', right_on='main_store_id')

    dfs.append(df_2)

0 个答案:

没有答案