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]]