1
我有一个熊猫数据帧matches
包含比赛结果如下:创建新的数据帧和聚合
year winner loser score
1990 A B 6-0
1990 B C 5-0 RET
1990 A B 4-0 RET
1990 C C 6-0
1991 A B 6-1
1991 A C 4-1 RET
1991 B A 6-4
1991 C A 3-0 RET
我想创建一个包含胜,损失和胜新数据帧每年退役。 最终输出768,16样子:
year player wins losses rets
1990 A 2 0 1
1990 B 1 2 1
1990 C 1 2 0
1991 A 2 2 1
1991 B 1 1 0
1991 C 1 1 1
对于胜利和失败,我可以成功地做到这一点。 我做的:
w_group = matches.groupby(['year', 'winner']).size()
l_group = matches.groupby(['year', 'loser']).size()
,然后创建一个新的数据框:
scores = pd.DataFrame({'wins' : w_group, 'losses' : l_group}).fillna(0)
#name the index
scores.index.names = ['year','player']
然而,通过退休,我不知道如何实现列计算胜。我尝试这样做:
ret_group = matches.groupby(['year', 'winner']).apply(lambda x: x[(x['score'].str.contains('RET').fillna(False))].count())
但是这给了我以下异常:
raise KeyError('%s not in index' % objarr[mask])
KeyError: '[ 0.] not in index'
您的解决方案是高度赞赏
你的代码适用于我(Python 3.4.3,pandas 0.16.2)。 – IanS
它会产生预期的结果吗?也就是说,带有列的新数据框,胜/损/退? – beta
我得到一个包含以下列的数据框:“年”,“胜者”,“失败者”,“得分”和“得分”表示你正在寻找的结果('[1,1, 0,1,0,1]')。 – IanS