我对熊猫还比较陌生,在基于汇总的groupby创建新列时遇到困难。
这是我的数据集的摘要:
In [1478]: mkt_vals_joined[['GameId', 'Year', 'HomeTeam', 'attMktValH']].head(10)
Out[1478]:
GameId Year HomeTeam attMktValH
0 1 2005 West Ham 18.50
1 2 2005 Aston Villa 31.85
2 3 2005 Everton 31.38
3 4 2005 Fulham 6.45
4 5 2005 Man City 30.80
5 6 2005 Middlesbrough 43.20
6 7 2005 Portsmouth 30.70
7 8 2005 Sunderland 5.80
8 9 2005 Arsenal 88.75
9 10 2005 Wigan 9.80
它具有直到2018年的数据。attMktValH列是特定年份某支球队的进攻值。例如,以下代码显示了阿森纳每年进攻的价值:
In [1483]: mkt_vals_joined.groupby(['HomeTeam', 'Year'])['attMktValH'].first()
Out[1483]:
HomeTeam Year
Arsenal 2005 88.75
2006 77.25
2007 42.45
2008 92.50
2009 102.50
2010 110.30
2011 149.50
2012 85.50
2013 76.90
2014 129.65
2015 125.00
2016 143.50
2017 238.00
2018 176.70
我的问题是我需要在原始数据框中为每场比赛创建一列,该列是联盟每年进攻总值的百分比。
例如,阿森纳在2005年的价值为88.75,整个联盟的价值约为820,因此对于2005年的每场阿森纳比赛,其价值均为88.75 / 820 * 100
如果我简单地将Year和Team的分组相加,它将对每个游戏进行合计,并给我错误的结果。
我当前用于执行此操作的代码如下:
home_mkt_vals['attMkt%'] = home_mkt_vals['attMktValH'] / home_mkt_vals.groupby(['Year'])['attMktValH'].transform(lambda x: np.mean(x) * 20) * 100
但是,这对我来说似乎非常丑陋,并且只能起作用,因为每个赛季有20支球队。
谢谢您的帮助。