Как оптимизировать производительность этого кода? - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь запустить код ниже.Он отлично работает для небольшого размера данных, но для больших объемов данных это занимает почти день.

Любой, кто может помочь оптимизировать код или кто подскажет мне подход.Можем ли мы использовать apply lambda для решения проблемы?

for index in df.index:

        for i in df.index:

            if ((df.loc[index,"cityId"]==df.loc[i,"cityId"]) & (df.loc[index,"landingPagePath"]==df.loc[i,"landingPagePath"]) & 
                (df.loc[index,"exitPagePath"]==df.loc[i,"exitPagePath"]) &
                (df.loc[index,"campaign"]==df.loc[i,"campaign"]) &
                (df.loc[index,"pagePath"]==df.loc[i,"previousPagePath"]) &
                ((df.loc[index,"dateHourMinute"]+timedelta(minutes=math.floor(df.loc[index,"timeOnPage"]/60))==df.loc[i,"dateHourMinute"]) |
                        (df.loc[index,"dateHourMinute"]==df.loc[i,"dateHourMinute"]) |
                        ((df.loc[index,"dateHourMinute"]+timedelta(minutes=math.floor(df.loc[index,"timeOnPage"]/60))+timedelta(minutes=1))==df.loc[i,"dateHourMinute"]))
                ):
                    if(df.loc[i,"sess"]==0):


                        df.loc[i,'sess']=df.loc[index,'sess']

                    elif(df.loc[index,"sess"]>df.loc[i,"sess"] ):

                        df.loc[index,'sess']=df.loc[i,'sess']

                    elif(df.loc[index,"sess"]==0):
                        df.loc[index,'sess']=df.loc[i,'sess'] 

                    elif(df.loc[index,"sess"]<df.loc[i,"sess"] ):
                        x=df.loc[i,"sess"]
                        for q in df.index:
                            if(df.loc[q,"sess"]==x):
                                df.loc[q,"sess"]=df.loc[index,'sess']






            else:
                if (df.loc[index,"sess"]==0):

                    df.loc[index,'sess'] = max(df["sess"])+1

1 Ответ

0 голосов
/ 18 декабря 2018

похоже, что вы пытаетесь выполнить объединение базы данных вручную, Pandas представляет эту функциональность как merge, и использование этого будет иметь большое значение для решения вашей проблемы

У меня проблемы с отслеживанием всех ваших веток, но вы должны быть в состоянии пройти большую часть пути, если вы используете merge, а затем, возможно, выполните некоторую постобработку / фильтрацию, чтобы получить окончательный ответ

...