Почему result_type = «expand» на кадре данных так медленно? - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю с SAS и SQL около двух десятилетий, и я относительно новичок в python и pandas. В python есть некоторые вещи, которые меня удивляют, и проблема производительности с result_type - одна из тех вещей.

import pandas as pd
from datetime import datetime as dt

# Dataframe
df = pd.DataFrame()
df["A"] = range( 0 , 200000 )
df["B"] = df.A * 3


# Timer
def TimeStamp( X ):
    print( "*** " + X + " - " + dt.strftime( dt.now() , "%Y.%m.%d %H:%M:%S" ))


# Method A -------------------------------------------------------------------
TimeStamp( "Method A - start" )    

def Calc1( X ):
    return X.A + X.B

def Calc2( X ):
    return X.B - X.A

df["V"] = df.apply( Calc1 , axis = 1 )
df["W"] = df.apply( Calc2 , axis = 1 )

TimeStamp( "Method A - end" )    


# Method B -------------------------------------------------------------------
TimeStamp( "Method B - start" )    

def Calc3( X ):
    return X.A + X.B , X.B - X.A

df[["X" , "Y"]] = df.apply( Calc3 , axis = 1 , result_type = "expand" )

TimeStamp( "Method B - end" )    

Я бы ожидал, что метод B будет быстрее, чем метод A, потому что метод B передает данные только один раз, а метод A передает данные дважды. Однако метод B занимает в два раза больше времени, чем метод A.

*** Method A - start - 2020.04.20 16:46:33
*** Method A - end - 2020.04.20 16:46:42
*** Method B - start - 2020.04.20 16:46:42
*** Method B - end - 2020.04.20 16:47:03

Может кто-нибудь объяснить мне, почему это так? Я предполагаю, что проблема заключается в «расширении».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...