iterrows()需要几个小时才能运行,如何加快运行速度?

2024-06-17 12:24:48 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是示例数据- Sample Data

当前解决方案-

for idx, row in data.iterrows():

    rp = row['right_player_test']
    lp = row['left_player_test']
    p = row['Player']

    if rp in p:
        data.loc[idx, 'side'] = 'right'

    elif lp in p:
        data.loc[idx, 'side'] = 'left'

    else:
        print('bad -', lp, rp, p)

右玩家测试是“配对信息”字段中的右玩家
左棋盘测试是“对决信息”字段中的左棋手
在“数据”数据框中有更多的统计数据,它们是为“玩家”字段中的任何人提供的

目标是确定“Player”是在“Matchup\u info”的左侧还是右侧,并将结果分配到“side”列,以便我可以从“Score”字段中获得正确的值。分数中“-”左边的数字属于左边的选手,反之亦然。你知道吗

例如,在第一个记录中,Tihomir Grozdanov的总分为12(6+6),而Vatutin的总分为5(4+1)

问题是,我这样做了大约250K+行(与可能的更多),这是需要几个小时才能完成。有没有更快的方法来完成这个任务?你知道吗

我想不出如何在这里使用apply(),因为我需要使用3列来计算side字段。我现在能想到的唯一其他解决方案是尝试使用多处理软件包,但我想在跳到那个之前看看是否有其他的替代方案。你知道吗

谢谢!你知道吗


Tags: 数据intestrightdata玩家解决方案left
1条回答
网友
1楼 · 发布于 2024-06-17 12:24:48

您可以使用numpyselect,与zip

s1=np.array([x in y for x , y in zip(df['right_player_test'],df['Player'])])
s2=np.array([x in y for x , y in zip(df['left_player_test'],df['Player'])])    
np.select([s1,s2,np.logical_and(~s1,~s2)],['right','left','bad'])

相关问题 更多 >