Как я понимаю, вы хотите присвоить значение каждой уникальной комбинации двух столбцов в вашем DataFrame.
Вы можете использовать этот подход, чтобы создать dict с кодами или сгенерировать его с помощью itertools, если есть не все комбинации в кадре данных.
combs = set(zip(df['winner'], df['newcol2']))
codes = dict(zip(combs, range(len(combs))))
Используйте метод apply, чтобы заменить комбинации в двух столбцах кодированным значением:
df['result'] = df.apply(lambda x: codes[x['winner'], x['newcol2']], axis=1)