我有一张由两位选手组成的比赛桌:
date plA plB ptsA ptsB
0 01/01/2013 Jeff Tom 78 72
1 15/01/2013 Jeff Tom 52 67
2 01/02/2013 Tom Jeff 91 93
3 15/02/2013 Jeff Tom 83 87
4 01/03/2013 Tom Jeff 65 76
我想应用扩展的平均值,这样每个玩家的ptsA
和ptsB
都被计算到净结果中(并且没有被留下)。最终结果应该更清楚:
date plA plB ptsA ptsB meanA meanB
0 01/01/2013 Jeff Tom 78 72 78 72 # init mean
1 15/01/2013 Jeff Tom 52 67 65 69.5
2 01/02/2013 Tom Jeff 91 93 74.3 76.6 # Tom: (72+67+91)/3, Jeff: (78+52+93)/3
3 15/02/2013 Jeff Tom 83 87 76.5 79.25 # Jeff: (78+52+93+83)/4, Tom: (72+67+91+87)/4
4 01/03/2013 Tom Jeff 65 76 76.4 76.4 # Tom: (72+67+91+87+65)/5, Jeff: (78+52+93+83+76)/5
现在,我开始按plA
对数据进行分组,如下所示:
by_A = players.sort(columns='date').groupby('plA')
players['meanA'] = by_A['ptsA'].apply(pd.expanding_mean)
players['meanB'] = by_A['ptsB'].apply(pd.expanding_mean)
很明显,我需要做同样的事情,然后groupby('plB')
然后我画了一个空白,如何正确地连接这两个结果。你知道吗
也许熊猫提供了一个内置的或你有一个解决方案?你知道吗
@EDIT Saullo Castro的解决方案,数据略有不同
date studentA studentB scoreA scoreB meanJeff meanTom meanMaggie
0 2013-01-01 Jeff Tom 78 72 78.000000 72.000000 0.000000
1 2013-01-15 Jeff Maggie 52 67 65.000000 36.000000 33.500000
2 2013-02-01 Tom Jeff 91 93 74.333333 54.333333 22.333333
3 2013-02-15 Jeff Tom 83 87 76.500000 62.500000 16.750000
4 2013-03-01 Tom Jeff 65 76 76.400000 63.000000 13.400000
麦琪的意思应该一直是67
。你知道吗
(请参阅下面的固定解决方案)
一种方法是先找出所有玩家的名字:
然后为每个玩家创建一个新的列,扩展平均值:
导致:
编辑:固定解决方案:
对于两个以上的名称,这是如何建立扩展平均值的公式:
导致:
相关问题 更多 >
编程相关推荐