Расчет фрейма данных с использованием группировки - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь вычислить среднее значение для столбца, используя группу данных, и получаю неверный результат. Я примерно знаю, почему он это делает, я просто не знаю, как это исправить. Я пытаюсь получить среднюю игру противника команды - прямо сейчас, он рассчитывает правильно, но ставит его в неправильный ряд. Например, в Грин Бэй играли Чикаго и Миннесота - их соперники в среднем пробежали 62,5 игры. Чикаго играл Грин Бэй и Денвер, которые в среднем провели 66,5 пьес. Поэтому, в моем примере, противники Чикаго за игру должны быть 66,5, а ГБ - 62,5. К сожалению, это наоборот. Я думаю, что это группировка по защите и запись среднего значения в первый ряд, который в данном случае фактически является их противником. Это сложно объяснить, поэтому я прилагаю изображения, чтобы показать, что происходит.

Я также знаю, что, вероятно, могу написать функцию в отличие от структуры кода сейчас, и это, вероятно, будет моей задачей завтра, но на данный момент здесь есть код.

import pandas as pd
import os
import time
import numpy as np

beginningTime = time.time()

dfTeam = pd.read_csv("TEAM.csv")


dfSchedule = pd.read_csv("SCHEDULE.csv")

dfTandS = pd.merge(dfTeam, dfSchedule, on='gid', how='inner')

dfTandS['Defense'] = np.where(dfTandS.tname == dfTandS.v, dfTandS.h, dfTandS.v)

dfTandS.to_excel("Team and Schedule.xlsx", index=False)

dfTeamRankings = pd.read_excel("Team Rankings.xlsx")
dfTandS['Total Plays'] = dfTandS['ra'] + dfTandS['pa'] + dfTandS['sk']
dfTandS['Passing Plays'] = dfTandS['pa'] + dfTandS['sk']


dfTeamRankings['Plays Per Game'] = dfTandS.groupby('tname')['Total Plays'].transform('mean')
dfTeamRankings['Rank - Plays Per Game'] = dfTeamRankings['Plays Per Game'].rank(ascending=False, method='min')
Это где он работает не совсем правильно
dfTeamRankings['Opponent Plays Per Game'] = dfTandS.groupby('Defense')['Total Plays'].transform('mean')
dfTeamRankings['Rank - Opponent Plays Per Game'] = dfTeamRankings['Opponent Plays Per Game'].rank(ascending=False, method='min')


dfTeamRankings['Passing Plays Per Game'] = dfTandS.groupby('tname')['Passing Plays'].transform('mean')
dfTeamRankings['Rank - Passing Plays Per Game'] = dfTeamRankings['Passing Plays Per Game'].rank(ascending=False, method='min')


dfTeamRankings['Rushing Plays Per Game'] = dfTandS.groupby('tname')['ra'].transform('mean')
dfTeamRankings['Rank - Rushing Plays Per Game'] = dfTeamRankings['Rushing Plays Per Game'].rank(ascending=False, method='min')

dfTeamRankings.to_excel('Team Rankings.xlsx', index=False)

Structure of initial data

Improper Output as numbers are flipped between the two teams

1 Ответ

0 голосов
/ 13 октября 2019

Трудно понять, что будет лучше всего работать без данных, но это может помочь:

dfTeamRankings['Opponent Plays Per Game'] = dfTandS.groupby('Defense').agg(np.mean)['Total Plays']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...