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