【问题标题】:How to sort Table in Python如何在 Python 中对表格进行排序
【发布时间】:2019-03-04 10:40:55
【问题描述】:

您好,我想根据每支球队的积分而不是球队名称来对德甲联赛表进行排序。有人能帮我吗?目前我只能按团队名称对问题进行排序。我不知道如何对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] ))

【问题讨论】:

标签: python pandas csv sorting


【解决方案1】:

我建议您仔细查看 Pandas 文档,尤其是 groupby(链接 here)和 merge(链接 here)函数。他们给出了很好的例子,提供了你正在寻找的答案。有关合并可以提供什么的更多示例,请查看this article,其中包含有关不同组合的大量示例。

话虽如此,下面是一种仅使用 Pandas 来为该联盟中的俱乐部按从高到低的顺序生成总进球数的方法。

我做了一些假设:

  • 使用的 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)

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多