Циклы с использованием Numpy Векторизация - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь воспроизвести результаты, которые используют циклы и numpy векторизация, статья найдена здесь (https://towardsdatascience.com/how-to-make-your-pandas-loop-71-803-times-faster-805030df4f06). Статья не содержит данных или результатов прогона, но я смог найти данные в Интернете. Я хочу воспроизвести результаты для моей собственной работы, но вывод не правильный.

Я включил небольшую часть исходного фрейма данных из статьи и соответствующий код:

import pandas as pd 
data = {'HomeTeam':['Burnley','Crystal Palace','Everton','Hull','Man City','Middlesbrough','Southampton',
'Arsenal','Bournemouth','Chelsea','Man United','Burnley','Leicester','Stoke'], 'AwayTeam':['Swansea','West Brom','Tottenham','Leicester','Sunderland','Stoke','Watford','Liverpool','Man United',
'West Ham','Southampton','Liverpool','Arsenal','Man City'], 'FTR': ['A','A','D','H','H','D','D','A','A','H','H','H','D','A']} 

leaguedf = pd.DataFrame(data) 

def soc_iter(TEAM,home,away,ftr):
    leaguedf['Draws'] = 'No_Game'
    leaguedf.loc[((home == TEAM) & (ftr == 'D')) | ((away == TEAM) & (ftr == 'D')), 'Draws'] = 'Draw'
    leaguedf.loc[((home == TEAM) & (ftr != 'D')) | ((away == TEAM) & (ftr != 'D')), 'Draws'] = 'No_Draw'

leaguedf['Draws']=soc_iter('Arsenal',leaguedf['HomeTeam'].values, leaguedf['AwayTeam'].values, leaguedf['FTR'].values)
leaguedf

Когда я запускаю код, выходной столбец «Dr aws» генерирует только выходные данные «None» вместо «Draw» или «No_Draw».

results

Что не так с кодом?

1 Ответ

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

Ваша функция ничего не возвращает, поэтому Dr aws будет равен None, вам не нужно ничего назначать, код внутри функции уже создает столбец Draw:

import pandas as pd 
data = {'HomeTeam':['Burnley','Crystal Palace','Everton','Hull','Man City','Middlesbrough','Southampton',
'Arsenal','Bournemouth','Chelsea','Man United','Burnley','Leicester','Stoke'], 'AwayTeam':['Swansea','West Brom','Tottenham','Leicester','Sunderland','Stoke','Watford','Liverpool','Man United',
'West Ham','Southampton','Liverpool','Arsenal','Man City'], 'FTR': ['A','A','D','H','H','D','D','A','A','H','H','H','D','A']} 

leaguedf = pd.DataFrame(data) 

def soc_iter(TEAM,home,away,ftr):
    leaguedf['Draws'] = 'No_Game'
    leaguedf.loc[((home == TEAM) & (ftr == 'D')) | ((away == TEAM) & (ftr == 'D')), 'Draws'] = 'Draw'
    leaguedf.loc[((home == TEAM) & (ftr != 'D')) | ((away == TEAM) & (ftr != 'D')), 'Draws'] = 'No_Draw'

soc_iter('Arsenal',leaguedf['HomeTeam'].values, leaguedf['AwayTeam'].values, leaguedf['FTR'].values)
leaguedf

           HomeTeam     AwayTeam FTR    Draws
0          Burnley      Swansea   A  No_Game
1   Crystal Palace    West Brom   A  No_Game
2          Everton    Tottenham   D  No_Game
3             Hull    Leicester   H  No_Game
4         Man City   Sunderland   H  No_Game
5    Middlesbrough        Stoke   D  No_Game
6      Southampton      Watford   D  No_Game
7          Arsenal    Liverpool   A  No_Draw
8      Bournemouth   Man United   A  No_Game
9          Chelsea     West Ham   H  No_Game
10      Man United  Southampton   H  No_Game
11         Burnley    Liverpool   H  No_Game
12       Leicester      Arsenal   D     Draw
13           Stoke     Man City   A  No_Game
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...