У меня есть данные о результатах теннисного матча:
tennis_cols = ['Year','TourNo','MatchNo','Round','Winner','Loser']
tennis_rslts = [ [2018, 1, 1, 'QF', 'PlayerA', 'PlayerB']
,[2018, 1, 2, 'QF', 'PlayerC', 'PlayerD']
,[2018, 1, 3, 'QF', 'PlayerE', 'PlayerF']
,[2018, 1, 4, 'QF', 'PlayerG', 'PlayerH']
,[2018, 1, 5, 'SF', 'PlayerA', 'PlayerC']
,[2018, 1, 6, 'SF', 'PlayerE', 'PlayerG']
,[2018, 1, 7, 'F', 'PlayerA', 'PlayerE'] ]
dfTennis=pd.DataFrame(tennis_rslts,columns=tennis_cols)
dfTennis
Year TourNo MatchNo Round Winner Loser
0 2018 1 1 QF PlayerA PlayerB
1 2018 1 2 QF PlayerC PlayerD
2 2018 1 3 QF PlayerE PlayerF
3 2018 1 4 QF PlayerG PlayerH
4 2018 1 5 SF PlayerA PlayerC
5 2018 1 6 SF PlayerE PlayerG
6 2018 1 7 F PlayerA PlayerE
Я хочу добавить столбец WinsToDate, в котором будет указано количество побед победителя в этом матче до текущего матча, т. Е .:
Year TourNo MatchNo Round Winner Loser WinsToDate
0 2018 1 1 QF PlayerA PlayerB 0
1 2018 1 2 QF PlayerC PlayerD 0
2 2018 1 3 QF PlayerE PlayerF 0
3 2018 1 4 QF PlayerG PlayerH 0
4 2018 1 5 SF PlayerA PlayerC 1 <-- PlayerA won MatchNo 1
5 2018 1 6 SF PlayerE PlayerG 1 <-- PlayerE won MatchNo 3
6 2018 1 7 F PlayerA PlayerE 2 <-- PlayerA won MatchNo 1 and 5
Мой реальный набор данных достаточно большой, чтобы итерация по набору данных была слишком медленной. Есть идеи, как мне эффективно добиться результата?
По сути, я хочу посчитать количество строк, в которых Победитель соответствует обрабатываемой строке, а номер совпадения меньше текущей обрабатываемой строки.
** ОБНОВЛЕНИЕ **
Я могу подсчитать, сколько раз победитель встречается в кадре данных, используя:
dfTennis['Count'] = list(map(lambda x : len(dfTennis[(dfTennis['Winner'] == x)]), dfTennis['Winner']))
Но здесь учитываются все вхождения, а не все вхождения до текущей строки.