当前解决方案-
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)
right_player_test是“比赛信息”字段中的正确玩家
left_plater_test是“比赛信息”字段中的左侧玩家
“数据”数据帧中有更多统计信息,这些数据适用于“玩家”字段中的任何人
目标是确定“播放器”位于“ Matchup_info”的左侧还是右侧,并将结果分配给“ side”列,以便我可以从“ Score”字段中获取正确的值。分数“-”左侧的数字属于左手玩家,反之亦然。
例如,在第一条记录中,Tihomir Grozdanov
的总得分为12(6 + 6),而Vatutin
的总得分为5(4 + 1)
问题是我正在执行大约250K +行(可能还会有更多行),并且要花几个小时才能完成。有没有更快的方法可以做到这一点?
在这里我无法考虑如何使用apply()
,因为我需要使用3列来计算side
字段。我现在唯一能想到的其他解决方案是尝试使用多处理程序包,但我想在跳转到此之前先看看是否有其他熊猫替代品。
谢谢!
答案 0 :(得分:1)
您可以将numpy
和select
一起使用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'])