Создание нокаут-турниров в Пандах - PullRequest
0 голосов
/ 28 июня 2018

Я создаю выбитые турнирные матчи для футбольных игр.

df = pd.DataFrame()
df['Team1']   = ['A','B','C','D','E','F']
df['Score1']  = [1,2,3,1,2,4]
df['Team2']   = ['U','V','W','X','Y','Z']
df['Score2']  = [2,1,2,2,3,3]
df['Match']   = df['Team1']  + ' Vs '+ df['Team2']
df['Match_no']= [1,2,3,4,5,6]
winner = df.Score1>df.Score2
df['winner']  = np.where(winner,df['Team1'],df['Team2'])
df ['Stage']  ='R16

Допустим, приведенный выше код предназначен для стадии выбивания. Запустив вышеуказанный код, мы получаем победителя для каждого матча (6 победителей). Каждое совпадение нумеруется как 1,2,3 и т. Д.

Что я хочу сделать, так это создать еще одну рамку даты для следующего этапа турнира. На следующем этапе у нас будет 3 матча. В этих матчах будет играть победитель с нечетным номером и четным номером матча (то есть U против B, C против X, Y против F) Мне просто нужно, чтобы команды были в новом датафрейме. Может кто-нибудь посоветовать мне, как извлечь эти команды?

Спасибо

Zep

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

пожалуйста, попробуйте,

df1=pd.DataFrame()
df1['Team1']=df.loc[0::2,'winner'].values
df1['Team2']=df.loc[1::2,'winner'].values
0 голосов
/ 28 июня 2018

Вы можете использовать нарезку списка, some_list[start:stop:step]

winners_list = df['winner'].tolist()
df1 =  pd.DataFrame()
df1['Team1'] = winners_list[0::2]
df1['Team2'] = winners_list[1::2]
  • Возьмите победителей из df в качестве списка (вы также можете принять за pandas.core.series.Series и использовать нарезку, но при использовании ее для создания фрейма данных у вас возникнут проблемы из-за индексации)
  • Создайте новый фрейм данных и возьмите четные индексированные элементы из списка победителей как Team1
  • Возьмите нечетные проиндексированные элементы из списка победителей как Team2.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...