【问题标题】:How to run function through a list?如何通过列表运行功能?
【发布时间】:2020-07-26 09:59:37
【问题描述】:
  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}

所以我在上面创建了列表 teamname,然后创建了一个函数,该函数返回一个字典,其中包含列表 teamname 中的一个名称和他们拥有的点数。现在,我想知道如何通过整个团队名称列表运行该功能并打印所有团队及其各自的点。谢谢你:)。

【问题讨论】:

    标签: python pandas list function dataframe


    【解决方案1】:

    我不确定我是否完全了解您的代码中发生的情况,但是,

    这会做你想要的吗?如果不评论为什么不,我会添加到答案中

    for team in ARRAY_OF_TEAMS:
        print(TeamsPointsDict(df, team));
    

    【讨论】:

      【解决方案2】:

      由于您的操作本质上是添加两个总和聚合,因此请考虑使用 pandas.groupby 和不需要 for 循环的 join

      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}
      

      【讨论】:

      • 嗨,这确实有效,但问题是告诉我编写一个接受输入并返回字典的函数
      • 查看函数中的编辑包装过程。删除 .query() 以返回所有团队的字典。但听起来你是在回答课程作业,而不是你自己的分析。
      • 是的,它不起作用,因此我可以通过列表运行该功能,以便为所有团队打印它
      • 哦,等等冻糕,我意识到我是个白痴,只是没有正确查看您的代码,我很抱歉!
      猜你喜欢
      • 1970-01-01
      • 2011-05-15
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2020-08-29
      相关资源
      最近更新 更多