簡體   English   中英

python熊貓遍歷數據框返回字典

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM