熊猫数据框简单统计

时间:2020-09-18 04:23:30

标签: python pandas dataframe data-analysis

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

是否有一种简单的方法既可以考虑当团队赢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的范围内,并告诉您玩游戏的星期几。它表示与dayzero文件中的seasons.csv日期的偏移量。例如,文件中的第一个游戏是daynum = 20。结合season.csv文件中的事实,零日为1984年10月29日,这意味着第一场比赛是在20天后(即1984年11月18日)进行的。在给定的日期,没有团队玩过一场以上的比赛,因此如果您需要唯一的钥匙,则可以使用此事实。为了实现这种独特性,我们必须调整一个游戏的日期。 2008年3月,SEC季后赛不得不将一场比赛(格鲁吉亚-肯塔基州)重新安排到第二天,因此乔治亚州实际上必须在同一天打两场比赛。为了实现这种独特性,我们将佐治亚州-肯塔基州游戏的游戏日期改回其原始日期。

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

wscore-标识获胜团队的得分点。

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

lscore-这标识了输球队得分的数量。

numot-这表示游戏中的超时时间,整数0或更高。

wloc-标识获胜团队的location。如果获胜的团队是主队,则此值为H。如果获胜的团队是客队,则该值为A。如果在中立的球场上进行比赛,则此值为N。有时,不清楚该地点是否应视为中立,因为它在一个团队的主场附近,甚至在比赛期间也在他们的场上,但是对于这种确定,我们仅使用肯尼思·梅西数据在当前状态下,{ {1}}标志与获胜球队,失败球队或没有球队一同列出。

1 个答案:

答案 0 :(得分: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

仅包含Win Team列表的DataFrame

   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