Как отсортировать таблицу в Python - PullRequest
0 голосов
/ 28 сентября 2018

Здравствуйте. Я бы хотел отсортировать таблицу Бундеслиги по баллам каждой команды, а не по названию команды.Кто-нибудь может мне помочь?В настоящее время я могу отсортировать проблему только по названию команды.Я не знаю, как сортировать точки после цикла for.

def push2(self):
    #Download Database
    urllib.request.urlretrieve(
        "http://www.football-data.co.uk/mmz4281/1819/d1.csv",
        "2018-19.csv")
    #Read Database
    df = pd.read_csv("2018-19.csv")
    teams = df["HomeTeam"]
    teams = teams.drop_duplicates()
    teams = teams.sort_values(0, False, False)
    teams = teams.tolist()
    namesLen = len(teams)
    for i in range(0, namesLen):


        # Get points through victories
        team = df[(df["HomeTeam"] == teams[i]) | (
                df["AwayTeam"] == teams[i])]
        teamWin = team[((team["FTR"] == "H") & (
                team["HomeTeam"] == teams[i])) | (
                               (team["FTR"] == "A") & (
                               team["AwayTeam"] == teams[
                           i]))]
        teamTotalPoints = (len(teamWin.index) * 3)

        # Get points through draw
        teamU = df[(df["HomeTeam"] == teams[i]) | (
                df["AwayTeam"] == teams[i])]
        teamD = teamU[(team["FTR"] == "D")]
        teamDTotal = (len(teamD.index) * 1)

        # Total points wins and points draws
        teamT = teamTotalPoints + teamDTotal

        teamTStr = str(teamT)


        print(str( teamTStr + ": " +teams[i] ))

1 Ответ

0 голосов
/ 29 сентября 2018

Я бы порекомендовал вам поближе ознакомиться с документацией Pandas, в частности с функциями groupby (ссылка здесь ) и merge (ссылка здесь ).Они дают отличные примеры, которые предлагают части ответа, который вы ищете.Для большего количества примеров того, что может предложить слияние, взгляните на эту статью с тоннами примеров различных комбинаций.

При этом ниже приведен способ использования только панд для полученияобщее количество голов по порядку от высшего к низшему для клубов в этой лиге.

Некоторые предположения, которые я принял:

  • Используемая версия Python - 2.7
  • Версия Pandasиспользуется не менее 0,19.
  • После некоторой группировки и сортировки конечным результатом является новый dataframe, которым можно манипулировать.
  • Файл уже загружен в скрипт Python.
  • Столбцы основаны на http://www.football -data.co.uk / notes.txt
  • Предполагается, что в столбце HomeTeam нет ошибок.

Функция ниже должна повторяться до тех пор, пока ваш фрейм данных будет иметь ту же структуру, что и указанная вами ссылка.

import pandas as pd

def sortTable(df):
    """
    Returns a pd.DataFrame with goals scored by teams, sorted by total goals.

    df: pd.DataFrame, raw dataframe taken from .csv.
    """
    # groups by the Home team name, sums the FTHG, resets the grouping object indexing
    home_goals = df.groupby(['HomeTeam'])[['FTHG']].sum().reset_index()

    # rename the HomeTeam column to 'Team', column shared by tables to be merged
    home_goals.rename(columns = {'HomeTeam': 'Team'}, inplace = True)

    # groups by the away team name, sums the FTAG, resets the grouping object indexing
    away_goals = df.groupby(['AwayTeam'])[['FTAG']].sum().reset_index()
    away_goals.rename(columns = {'AwayTeam': 'Team'}, inplace = True)

    # merge the 2 tables by the team name
    goals_table = pd.merge(home_goals, away_goals, on='Team')
    goals_table['FTG'] = goals_table['FTHG'] + goals_table['FTAG']

    return goals_table.sort_values('FTG', ascending=False)


""" ------ Run Function Example ------ """
df_old = pd.read_csv('path_to_csv')
df_new = sortTable(df_old)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...