【问题标题】:Adding Specific Team Score in pandas在 pandas 中添加特定的团队分数
【发布时间】:2018-06-02 20:36:59
【问题描述】:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("fivethirtyeight")

df_2010=pd.read_csv("c:/users/ashub/downloads/documents/MLB 2010.csv",index_col=0)
df_new=df_2010[["Home Score","Away Score","Home Team","Away Team","Home Hits","Away Hits","Home Err","Away Err"]]
#print(df_2010)

flag=df_2010["Home Score"]>df_2010["Away Score"]
df_new["Home Score Index"]= flag.astype(int)
df_new["Away Score Index"]= (~flag).astype(int)

flag1=df_2010["Home Score"]/df_2010["Home Hits"]
df_new["Home to Hits Index"]= flag1.astype(float)

flag1=df_2010["Away Score"]/df_2010["Away Hits"]
df_new["Away to Hits Index"]= flag1.astype(float)

flag1=df_2010["Home Err"]/df_2010["Home Score"]
df_new["Home Error Factor"]= flag1.astype(float)

flag1=df_2010["Away Err"]/df_2010["Away Score"]
df_new["Away Error Factor"]= flag1.astype(float)

df_new["Home Error Factor"].fillna(0,inplace=True)
df_new["Away Error Factor"].fillna(0,inplace=True)


wins_home=sum(df_new["Home Score Index"].tolist())
total_games=len(df_2010)
prob_win_at_home=wins_home/total_games
prob_lose_at_home=1-prob_win_at_home
print(prob_win_at_home)
print(prob_lose_at_home)


df_new.to_html("c:/users/ashub/desktop/ashu.html")

现在我想计算特定球队在主场比赛的总场数中的获胜场次,我也想计算客场球队的获胜场次。如何处理这个?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    当您groupby 时,您可以同时以多种方式聚合。使用 erocoar 的示例数据框:

    import pandas as pd
    
    games = pd.DataFrame(data={'Home': ['A', 'B', 'A', 'A', 'B'],
                               'Away': ['B', 'C', 'C', 'B', 'A'],
                               'Home Score': [0, 1, 4, 3, 0],
                               'Away Score': [1, 2, 2, 1, 1]})
    
    games['Home Win'] = (games['Home Score'] > games['Away Score']).astype(int)
    
    summary = games.groupby('Home').agg({'Home Win': 'sum',
                                         'Home': 'count'})
    
    summary['Home Win Ratio'] = summary['Home Win'] / summary['Home']
    

    会给你输出:

          Home Win  Home  Home Win Ratio
    Home                                
    A            2     3        0.666667
    B            0     2        0.000000
    

    【讨论】:

    • 不错!这也更紧凑:)
    【解决方案2】:

    这是我认为的一种方法?

    import pandas as pd
    
    games = pd.DataFrame(data = {"home" : ["A", "B", "A", "A", "B"],
                                 "away" : ["B", "C", "C", "B", "A"],
                                 "homescore" : [0, 1, 4, 3, 0],
                                 "awayscore" : [1, 2, 2, 1, 1]})
    
    games["homewin"] = games.apply(lambda row: 1 if row.homescore > row.awayscore else 0, axis=1)
    
    g = games.groupby(by=["home", "homewin"]).size().reset_index(name="games")
    g["homewin"] = g.apply(lambda row: row.homewin*row.games, axis=1)
    g = g.groupby(by=["home"]).sum()
    g["homewinratio"] = g["homewin"]/g["games"]
    
        g
        Out[105]: 
              homewin  games  homewinratio
        home                              
        A           2      3      0.666667
        B           0      2      0.000000
    

    虽然我确信还有更好的——我也很好奇

    【讨论】:

    • 这是个好主意(我已经捏住了你的数据框!)但我相信 lambdas 会比直接将函数应用于数据框要慢。
    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 2022-01-03
    • 2012-06-11
    • 2017-01-25
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多