python通过数据帧返回字典进行循环

python通过数据帧返回字典进行循环,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个熊猫数据框,看起来像这样 frame = pd.DataFrame({'home' : ['CHI', 'ATL', 'SEA', 'DET', 'STL','HOU' ,'CHI','CHI'], 'away' : ['DET', 'CHI', 'HOU', 'TOR', 'DAL', 'STL', 'MIA', 'SEA'], 'awayPTS' : [88, 75, 105, 99,

我有一个熊猫数据框,看起来像这样

frame =  pd.DataFrame({'home'    : ['CHI', 'ATL', 'SEA', 'DET', 'STL','HOU' ,'CHI','CHI'],
                     'away'    : ['DET', 'CHI', 'HOU', 'TOR', 'DAL', 'STL', 'MIA', 'SEA'],
                     'awayPTS' : [88, 75, 105, 99, 110, 85, 95, 100],
                     'homePTS' : [92, 88, 95, 97, 100, 74, 98, 110],
                      'week' : [1, 1, 1, 2, 2,3, 3, 4]})
我可以通过这样做得到我想要的输出

uniqueTeams = frame['home'].unique()

def _earlyGamesPTS(n):
   for team in uniqueTeams:
       homePTS = frame['homePTS'][(frame.week <= n) & (frame.home == team)].sum()
       awayPTS = frame['awayPTS'][(frame.week <= n) & (frame.away == team)].sum()
       totalPTS = homePTS+ awayPTS
       print team, totalPTS
uniqueTeams=frame['home'].unique()
def_早期摄像头(n):
对于UniqueTeam中的团队:

homePTS=frame['homePTS'][(frame.week最好使用pandas groupby:

# Limit the week
limited = frame[frame['week'] <= n]
# Calculate the home and away points
home_points= limited.groupby('home').sum()['homePTS']
away_points = limited.groupby('away').sum()['awayPTS']
# Sum them
home_points.add(away_points, fill_value=0)
要修复您的解决方案,您可以将每个迭代附加到列表中:

uniqueTeams = set(frame['home']) | set(frame['away'])

def _earlyGamesPTS(n):
    all_teams = []
    for team in uniqueTeams:
        homePTS = frame['homePTS'][(frame.week <= n) &
                                   (frame.home == team)].sum()
        awayPTS = frame['awayPTS'][(frame.week <= n) &
                                   (frame.away == team)].sum()
        totalPTS = homePTS+ awayPTS
        all_teams.append([team, totalPTS])
    return all_teams

最好使用pandas groupby:

# Limit the week
limited = frame[frame['week'] <= n]
# Calculate the home and away points
home_points= limited.groupby('home').sum()['homePTS']
away_points = limited.groupby('away').sum()['awayPTS']
# Sum them
home_points.add(away_points, fill_value=0)
要修复您的解决方案,您可以将每个迭代附加到列表中:

uniqueTeams = set(frame['home']) | set(frame['away'])

def _earlyGamesPTS(n):
    all_teams = []
    for team in uniqueTeams:
        homePTS = frame['homePTS'][(frame.week <= n) &
                                   (frame.home == team)].sum()
        awayPTS = frame['awayPTS'][(frame.week <= n) &
                                   (frame.away == team)].sum()
        totalPTS = homePTS+ awayPTS
        all_teams.append([team, totalPTS])
    return all_teams

顺便说一句,在pandas git master中,有一个新的
DataFrame.query()
方法。您可以在这里像
frame['homePTS']一样使用它。query('week或更好的是
frame.homePTS.query('week@PhillipCloud我从来没有问过你:为什么它决定使用字符串而不是类似sqlalchemy、django或其他风格的查询?我的意思是,没有人真正喜欢“字符串编程”:-/它非常容易出错,“sql注入”倾向于静态分析,不适用于其他一千种情况……或者这只是未来版本中实现完整查询系统的第一步?我不熟悉sqlalchemy/django查询。我猜它们是一种将db映射到对象的方法。我们选择使用字符串的一个原因是因为
numexpr
需要字符串。PARer是
ast.parse
,有一些提示(例如,语法错误会传播)。我们还希望在后端允许将来的引擎,例如
numba
。我不确定为什么在这种情况下SQL注入是一个问题。我想是一种更一般的“注入”攻击是可能的,但解析器会小心地禁止除表达式(无函数)之外的任何内容。希望在尝试破解时得到帮助:)@PhillipCloud是的,我是指一般注入,这就是我添加引号的原因:)SA/DJ查询基本上都在做同样的事情:生成字符串SQL查询,但使用可以在静态分析中检查的查询对象(并且在运行时检查注入)。但我假设,一旦实现了字符串版本,如果需要的话,实现查询系统将是一项简单得多的任务:)顺便说一句,在pandas git master中,有一个新的
DataFrame.query()
方法。您可以在这里像
frame['homePTS']一样使用它。query('week或更好的是
frame.homePTS.query('week@PhillipCloud我从来没有问过你:为什么它决定使用字符串而不是类似sqlalchemy、django或其他风格的查询?我的意思是,没有人真正喜欢“字符串编程”:-/它非常容易出错,“sql注入”倾向于静态分析,不适用于其他一千种情况……或者这只是未来版本中实现完整查询系统的第一步?我不熟悉sqlalchemy/django查询。我猜它们是一种将db映射到对象的方法。我们选择使用字符串的一个原因是因为
numexpr
需要字符串。PARer是
ast.parse
,有一些提示(例如,语法错误会传播)。我们还希望在后端允许将来的引擎,例如
numba
。我不确定为什么在这种情况下SQL注入是一个问题。我想是一种更一般的“注入”攻击是可能的,但解析器会小心地禁止除表达式(无函数)之外的任何内容。希望在尝试破解时得到帮助:)@PhillipCloud是的,我是指一般注入,这就是我添加引号的原因:)SA/DJ查询基本上都在做同样的事情:生成字符串SQL查询,但使用可以在静态分析中检查的查询对象(并且在运行时检查注入)。但我假设,一旦实现了字符串版本,如果需要的话,实现查询系统将是一项简单得多的任务:)
[['TOR', 99],
 ['DAL', 110],
 ['STL', 185],
 ['CHI', 265],
 ['ATL', 88],
 ['DET', 185],
 ['MIA', 95],
 ['HOU', 179],
 ['SEA', 95]]