Это решение вдохновлено этим ответом здесь и может быть адаптировано для решения вашего вопроса. Вы можете использовать itertools.product()
с string.ascii_uppercase
для создания списка букв, таких как ['A', 'B', 'C', ....., 'AA', 'AB', 'AC']
такой же длины, как ваш фрейм данных:
import pandas as pd
import string
import itertools
newlist = []
def iter_all_strings():
for size in itertools.count(1):
for s in itertools.product(string.ascii_uppercase, repeat=size):
yield "".join(s)
for s in itertools.islice(iter_all_strings(), len(df)):
newlist.append(s)
df['team ID'] = newlist
Урожайность:
team ID win
0 A 8
1 B 4
2 C 5
3 D 2
4 E 1
Я вижу, что вы изменили свой входной фрейм данных, чтобы включить неуникальные значения в столбец team ID
после того, как я составил свой ответ, поэтому небольшое изменение в последнем утверждении приведет к желаемому результату (примечание @ Эдгар Р. Мондрагон опубликовал эта часть первая в своем ответе):
df['team ID'] = df["team ID"].replace(dict(zip(
df["team ID"].sort_values().unique(),
newlist
)))
Урожайность:
team ID win
0 A 8
1 A 4
2 B 5
3 C 2
4 D 1