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