【问题标题】:Pandas Dataframe simple Stats熊猫数据框简单统计
【发布时间】:2021-01-05 00:17:48
【问题描述】:

我想找出球队在每个赛季每场比赛的平均得分。

有没有一种简单的方法可以同时考虑球队赢了Wscore 和球队输了Lscore 的情况?

    Season  Daynum  Wteam   Wscore  Lteam   Lscore  Wloc    Numot
0   1985    20     1228     81      1328       64     N      0
1   1985    25     1106     77      1354       70     H      0

season - 这是 seasons.csv 中相关条目的年份(最终锦标赛发生的年份)

daynum - 这个整数的范围总是从 0 到 132,告诉你游戏是在哪一天进行的。它表示与seasons.csv 文件中dayzero 日期的偏移量。例如,文件中的第一个游戏是 daynum=20。结合season.csv 文件中的事实,第 0 天是 1984 年 10 月 29 日,这意味着第一场比赛是在 20 天后进行的,即 1984 年 11 月 18 日。没有球队在给定日期打过超过一场比赛,因此如果您需要唯一的密钥,您可以使用这个事实。为了实现这种独特性,我们不得不调整一个游戏的日期。 2008 年 3 月,美国证券交易委员会季后赛不得不将一场比赛(乔治亚-肯塔基)重新安排到下一天,因此乔治亚不得不在同一天打两场比赛。为了加强这种独特性,我们将乔治亚-肯塔基比赛的比赛日期移回了原来的日期。

wteam - 这标识了赢得比赛的球队的 ID 号,如teams.csv 文件中所列。无论比赛是主队还是客队获胜,wteam 始终标识获胜球队。

wscore - 这表明获胜球队得分。

lteam - 这标识了输掉比赛的球队的 ID 号。

lscore - 这表明了失败球队的得分。

numot - 表示比赛中加时赛的次数,0或更大的整数。

wloc - 这标识了获胜团队的location。如果获胜球队是主队,则此值为H。如果获胜球队是客队,则此值为A。如果它是在中立球场上进行的,那么这个值将是N。有时不清楚该网站是否应该被视为中立,因为它靠近一支球队的主场,甚至在比赛期间在他们的球场上,但为了做出这一决定,我们只是使用了当前状态的肯尼斯梅西数据,其中@ 987654342@ 符号与获胜队、失败队或均未列出。

【问题讨论】:

  • 您能更新数据框示例吗?我不明白那一行数字是干什么用的。
  • 到目前为止你有没有尝试过?如果是这样,您面临什么问题?
  • 您好,欢迎来到 SO。请阅读How to ask,然后尝试通过编辑来改进您的问题,专注于特定问题并提供有关它的详细信息(代码、配置、错误消息、您面临的确切问题。

标签: python pandas dataframe data-analysis


【解决方案1】:

这是一种方法。

import pandas as pd
cols = ['Season','Daynum','Wteam','Wscore','Lteam','Lscore','Wloc','Numot']
colx = ['Season','Daynum','Team', 'Score']
dt   = [[1985, 20, 1228, 81, 1328, 64, 'N', 0],
        [1985, 20, 1354, 77, 1228, 70, 'H', 0],
        [1985, 25, 1106, 77, 1354, 70, 'H', 0],
        [1985, 25, 1328, 82, 1106, 78, 'N', 0],
        [1985, 21, 1106, 77, 1228, 65, 'N', 0]]

df = pd.DataFrame(data=dt,columns=cols)

#take the first 4 columns into d1. Keep only Season, Wteam, Wscore
#rename Wteam and Wscore as Team and Score
d1 = df.iloc[:,:4]
d1 = d1.rename(columns={'Wteam': 'Team', 'Wscore': 'Score'})
d1 = d1.drop(columns = ['Daynum'])

#take the first 4 columns into d1. Keep only Season, Lteam, Lscore
#rename Lteam and Lscore as Team and Score
d2 = df.iloc[:,:6]
d2 = d2.drop(columns =['Daynum','Wteam','Wscore'])
d2 = d2.rename(columns={'Lteam': 'Team', 'Lscore': 'Score'})

#Now you have two dataframes that have common name but subsets of original dataframe
d3 = pd.concat([d1,d2])

#Group by Season and Team to get the average Score for each team by each Season
print(d3 = d3.groupby(['Season','Team']).mean())

#To show you the breakup of each set, I am printing all the dataframes
print(df)
print(d1)
print(d2)
print(d3)

按赛季和球队的平均得分数据框

                 Score
Season Team           
1985   1106  77.333333
       1228  72.000000
       1328  73.000000
       1354  73.500000

原始数据框:

   Season  Daynum  Wteam  Wscore  Lteam  Lscore Wloc  Numot
0    1985      20   1228      81   1328      64    N      0
1    1985      20   1354      77   1228      70    H      0
2    1985      25   1106      77   1354      70    H      0
3    1985      25   1328      82   1106      78    N      0
4    1985      21   1106      77   1228      65    N      0

仅包含获胜团队列表的数据帧

   Season  Team  Score
0    1985  1228     81
1    1985  1354     77
2    1985  1106     77
3    1985  1328     82
4    1985  1106     77

只有失败团队列表的数据框

   Season  Team  Score
0    1985  1328     64
1    1985  1228     70
2    1985  1354     70
3    1985  1106     78
4    1985  1228     65

将 DataFrame 与输赢球队列表合并

这将是您需要分组并计算平均值的列表

   Season  Team  Score
0    1985  1228     81
1    1985  1354     77
2    1985  1106     77
3    1985  1328     82
4    1985  1106     77
0    1985  1328     64
1    1985  1228     70
2    1985  1354     70
3    1985  1106     78
4    1985  1228     65

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2021-04-02
    • 2018-07-23
    • 1970-01-01
    • 2019-06-21
    • 2017-08-21
    • 1970-01-01
    • 2018-03-28
    相关资源
    最近更新 更多