создать два столбца на основе функции с apply () - PullRequest
1 голос
/ 15 апреля 2020

У меня есть набор данных, содержащий футбольные данные премьер-лиги, такие как:

    HomeTeam    AwayTeam         FTHG  FTAG
0   Liverpool   Norwich            4    1
1   West Ham    Man City           0    5
2   Bournemouth Sheffield United   1    1
3   Burnley     Southampton        3    0
... ...         ...               ...  ...

, где "FTHG" и "FTAG" - цели домашней команды на полный рабочий день и цели выездной команды. Мне нужно написать функцию, которая вычисляет итоговую таблицу Премьер-лиги с учетом результатов (в виде фрейма данных). Я написал следующую функцию:

def calcScore(row):
    if PL_df.iloc[row]['FTHG'] > PL_df.iloc[row]['FTAG']: 
        x = 3
        y = 0
    elif PL_df.iloc[row]['FTHG'] < PL_df.iloc[row]['FTAG']:
        x = 0
        y = 3
    elif PL_df.iloc[row]['FTHG'] == PL_df.iloc[row]['FTAG']:
        x = 1
        y = 1
    return x,y

это работает, например, для первой строки выдает следующее:

in[1]: calcScore(0)
out[1]: (3,0)

Теперь мне нужно создать два столбца HP и AP, которые укажите количество очков, начисленных за команды хозяев и гостей, соответственно, используя apply (). Но я не могу придумать, как это сделать.

Надеюсь, я был достаточно ясен. Заранее спасибо.

1 Ответ

0 голосов
/ 15 апреля 2020

Нет необходимости в функции (а также быстрее, чем apply):

win_or_draws = df['FTHG'] > df['FTAG'], df['FTHG'] == df['FTAG']

df['HP'] = np.select( win_or_draws, (3,1), 0)
df['AP'] = np.select(win_or_draws, (0,1),3)

Вывод:

      HomeTeam          AwayTeam  FTHG  FTAG  HP  AP
0    Liverpool           Norwich     4     1   3   0
1     West Ham          Man City     0     5   0   3
2  Bournemouth  Sheffield United     1     1   1   1
3      Burnley       Southampton     3     0   3   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...