Как запустить функцию через список? - PullRequest
0 голосов
/ 13 апреля 2020
  teamname=print(prem['HomeTeam'].unique())

  ['Liverpool' 'West Ham' 'Bournemouth' 'Burnley' 'Crystal Palace' 'Watford' 'Tottenham' 'Leicester' 
  'Newcastle' 'Man United' 'Arsenal' 'Aston Villa' 'Brighton' 'Everton' 'Norwich' 'Southampton' 'Man 
   City' 'Sheffield United' 'Chelsea' 'Wolves']

   def TeamsPointsDict(df,teamname):
       team_name = teamname 
       num_points = df.loc[prem['HomeTeam'] == teamname, 'HP'].sum() + df.loc[prem['AwayTeam']==teamname, 'AP'].sum()
       d=dict()
       d[team_name]= num_points
       return d



       print(TeamsPointsDict(df,'Man City'))

       {'Man City': 57}

Итак, я создал список названий команд выше, а затем создал функцию, которая возвращает словарь с одним именем из списка названий команд и количеством набранных ими очков. Теперь мне интересно, как бы я смог запустить функцию через весь список названий команд и распечатать все команды и их соответствующие точки. Спасибо:).

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Я не уверен, что полностью понимаю, что происходит в вашем коде, но,

Будет ли это делать то, что вы хотите? Если не прокомментируете почему нет и я добавлю в ответ

for team in ARRAY_OF_TEAMS:
    print(TeamsPointsDict(df, team));
0 голосов
/ 13 апреля 2020

Поскольку ваша операция по существу добавляет две суммы сумм, рассмотрим pandas.groupby с join, не требующим for l oop:

def TeamsPointsDict(df, teamname):
    agg_df = (df.groupby(['HomeTeam'])['HP'].sum()
                .to_frame()
                .query("HomeTeam == @teamname")
                .join(df.groupby(['AwayTeam'])['AP'].sum())
                .sum(axis=1)
             )

    return agg_df.to_dict()

print(TeamsPointsDict(df, 'Man City'))

Для демонстрации со случайными данными:

import numpy as np
import pandas as pd

teams = ['Liverpool', 'West Ham', 'Bournemouth', 'Burnley', 'Crystal Palace', 
         'Watford', 'Tottenham', 'Leicester', 'Newcastle', 'Man United', 
         'Arsenal', 'Aston Villa', 'Brighton', 'Everton', 'Norwich', 
         'Southampton', 'Man City', 'Sheffield United', 'Chelsea', 'Wolves']

### DATA BUILD
np.random.seed(41320)
random_df = pd.DataFrame({'HomeTeam': np.random.choice(teams, 500),
                          'HP': np.random.randint(1, 10, 500),
                          'AwayTeam': np.random.choice(teams, 500),
                          'AP': np.random.randint(1, 10, 500)})

def TeamsPointsDict(df, teamname):
    agg_df = (df.groupby(['HomeTeam'])['HP'].sum()
                .to_frame()
                .query("HomeTeam == @teamname")
                .join(df.groupby(['AwayTeam'])['AP'].sum())
                .sum(axis=1)
             )

    return agg_df.to_dict()


print(TeamsPointsDict(random_df, 'Man City'))
# {'Man City': 238}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...