乾明编译整理,本文编辑 / 昱良
量子位 报道 | 公众号 QbitAI
-
但在这其中,就算是较小的DataFrame,使用标准循环也比较耗时。
-
遇到较大的DataFrame时,需要的时间会更长,会让人更加头疼。
def soc_loop(leaguedf,TEAM,):
leaguedf[ Draws ] = 99999
for row in range(0, len(leaguedf)):
if ((leaguedf[ HomeTeam ].iloc[row] == TEAM) & (leaguedf[ FTR ].iloc[row] == D )) |
((leaguedf[ AwayTeam ].iloc[row] == TEAM) & (leaguedf[ FTR ].iloc[row] == D )):
leaguedf[ Draws ].iloc[row] = Draw
elif ((leaguedf[ HomeTeam ].iloc[row] == TEAM) & (leaguedf[ FTR ].iloc[row] != D )) |
((leaguedf[ AwayTeam ].iloc[row] == TEAM) & (leaguedf[ FTR ].iloc[row] != D )):
leaguedf[ Draws ].iloc[row] = No_Draw
else:
leaguedf[ Draws ].iloc[row] = No_Game
def soc_iter(TEAM,home,away,ftr):
#team, row[ HomeTeam ], row[ AwayTeam ], row[ FTR ]
if [((home == TEAM) & (ftr == D )) | ((away == TEAM) & (ftr == D ))]:
result = Draw
elif [((home == TEAM) & (ftr != D )) | ((away == TEAM) & (ftr != D ))]:
result = No_Draw
else:
result = No_Game
return result
def soc_iter(TEAM,home,away,ftr):
df[ Draws ] = No_Game
df.loc[((home == TEAM) & (ftr == D )) | ((away == TEAM) & (ftr == D )), Draws ] = Draw
df.loc[((home == TEAM) & (ftr != D )) | ((away == TEAM) & (ftr != D )), Draws ] = No_Draw
-
1、如果要使用循环,则应始终选择apply方法。
-
2、否则,使用向量化是最好的,因为它更快!
https://towardsdatascience.com/how-to-make-your-pandas-loop-71-803-times-faster-805030df4f06
朋友会在“发现-看一看”看到你“在看”的内容