Создание новых столбцов с максимальным количеством значений в нескольких столбцах - PullRequest
1 голос
/ 25 февраля 2020

У меня есть фрейм данных, который содержит несколько столбцов следующим образом:

df = pd.DataFrame()
df ['Player'] = ['A','A','A','A','A','B','B','B','B','B',]
df ['Competition'] = ['x','x','y','y','y','x','y','z','y','y']
df ['Home'] = ['AB','EF','GH','AB','CF','EF','BD','BD','FG','CH']
df ['Away'] = ['CD','AB','AB','CF','AB','BD','BD','HF','BD','BD']

Я хочу создать новый столбец, основанный на игроке, соревновании и значении наибольшего вхождения в столбце Home и В гостях столбец. Допустим, имя нового столбца, который я хочу создать, - Team . Я хотел бы иметь новую колонку следующего содержания:

enter image description here

Так что предполагается назначить команду для каждого игрока для каждого соревнования. Может кто-нибудь посоветовать мне, как это сделать? Ваш совет будет высоко ценится.

Спасибо,

Zep.

1 Ответ

0 голосов
/ 25 февраля 2020

Использовать пользовательскую функцию с GroupBy.apply с DataFrame.stack, Series.mode и первым значением с Series.iat:

def f(x):
    x['Team'] = x[['Home','Away']].stack().mode().iat[0]
    return x

Другая аналогичная идея с Series.append:

def f(x):
    x['Team'] = x['Home'].append(x['Away']).mode().iat[0]
    return x

df = df.groupby(['Player','Competition']).apply(f)
print (df)
  Player Competition Home Away Team
0      A           x   AB   CD   AB
1      A           x   EF   AB   AB
2      A           y   GH   AB   AB
3      A           y   AB   CF   AB
4      A           y   CF   AB   AB
5      B           x   EF   BD   BD
6      B           y   BD   BD   BD
7      B           z   BD   HF   BD
8      B           y   FG   BD   BD
9      B           y   CH   BD   BD
...