[英]How to loop through pandas dataframe using a regular expression, counter, or string method and return a dictionary?
[英]python pandas loop through dataframe return dictionary
我有一個像這樣的熊貓數據框。
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
運行該功能將打印所需的信息。
我在讓函數返回想要的值時遇到麻煩。
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
return team, totalPTS
僅返回一組值。 我很確定縮進是正確的。
為什么這樣做,如何獲得它以返回字典?
最好使用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)
這給了我(n = 3):
ATL 88
CHI 265
DAL 110
DET 185
HOU 179
MIA 95
SEA 95
STL 185
TOR 99
要解決您的解決方案,您可以將每個迭代附加到列表中:
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
哪個(對於相同的n = 3)給出:
[['TOR', 99],
['DAL', 110],
['STL', 185],
['CHI', 265],
['ATL', 88],
['DET', 185],
['MIA', 95],
['HOU', 179],
['SEA', 95]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.