有没有一种方法可以计算Pandas时间表的盈亏记录?

2024-04-28 04:50:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我对熊猫和数据帧非常陌生。我在玩弄数据,我试图找出一种方法,根据他们的日程结果计算一个团队的记录。我尝试过很多事情,并且一直在看iterrows,但是在帖子中被告知远离它。那么,在不使用itterrows的情况下,如何计算记录呢

def get_team_record(team, last = 0):
    team_df = get_team_schedule(team, last)
    record = {'wins': 0, 'losses': 0}
    return record

get_team_schedule函数从一组游戏中获取特定团队的时间表。它返回如下内容:

^{tb1}$

计算每支球队的胜负最好的方法是什么


Tags: 数据方法get记录团队record事情team
2条回答
import pandas as pd
import numpy as np

def get_team_record(team, last = 0):
    team_df = get_team_schedule(team, last)
    results = np.where(
        # define these two conditions as a win, otherwise a loss
        ((team_df['Visitor'] == team) & (team_df['V_PTS'] > team_df['H_PTS'])) |
        ((team_df['Home'] == team) & (team_df['H_PTS'] > team_df['V_PTS'])),
        'win', 'loss')
    # sum each outcome and add to dict
    record = {'wins': np.sum(results == 'win'),
             'losses': np.sum(results == 'loss')}
    return(record)

你可以得到每场比赛的idxmax()来判断主客场赢了。从那里,用np.where确定赢家和输家,然后concat我们创建的每个列的value_counts(),并返回每个组的总和。使用.sum(level=0)是将索引作为一个组来执行.groupbysum的一种简单方法。索引是执行value_counts().to_frame()concat之后的团队:

s = df[['V_PTS', 'H_PTS']].idxmax(axis=1)
df['Wins'] = np.where(s.eq('V_PTS'), df['Visitor'],  df['Home'])
df['Losses'] = np.where(s.eq('V_PTS'), df['Home'], df['Visitor'])
df = (pd.concat([df['Wins'].value_counts().to_frame(), 
            df['Losses'].value_counts().to_frame()])
        .sum(level=0))
df
Out[1]: 
                   Wins  Losses
Atlanta Hawks       1.0     0.0
Boston Celtics      1.0     0.0
San Antonio Spurs   1.0     0.0
Memphis Grizzlies   1.0     3.0
Brooklyn Nets       0.0     1.0

相关问题 更多 >