如何计算熊猫数据框列中的值的比率?
我是 Pandas 的新手,并决定通过使用我从我最喜欢的游戏 API 中提取的一些数据来学习它。我有一个包含两列“playerId”和“winner”的数据框,如下所示:
playerStatus:
______________________
playerId winner
0 1848 True
1 1988 False
2 3543 True
3 1848 False
4 1988 False
...
每行代表玩家参与的一场比赛。我的目标是转换此数据框或创建一个新数据框,以便计算每个 playerId 的获胜百分比。例如,上面的数据框将变为:
playerWinsAndTotals
_________________________________________
playerId wins totalPlayed winPct
0 1848 1 2 50.0000
1 1988 0 2 0.0000
2 3543 1 1 100.0000
...
阅读 pandas 文档花了很长时间,但我实际上通过创建两个不同的表(一个用于查找每个玩家的获胜次数,一个用于查找每个玩家的总游戏数)并合并它们来实现这一点,然后取胜场数与比赛场数之比。
创建“胜利”数据框:
temp_df = playerStatus[['playerId', 'winner']].value_counts().reset_index(name='wins')
onlyWins = temp_df[temp_df['winner'] == True][['playerId', 'wins']]
onlyWins
_________________________
playerId wins
1 1670 483
3 1748 474
4 2179 468
6 4006 434
8 1668 392
...
创建“总计”数据框:
totalPlayed = playerStatus['playerId'].value_counts().reset_index(name='totalCount').rename(columns={'index': 'playerId'})
totalPlayed
____________________
playerId totalCount
0 1670 961
1 1748 919
2 1872 877
3 4006 839
4 2179 837
...
最后,合并它们并添加“winPct”列。
playerWinsAndTotals = onlyWins.merge(totalPlayed, on='playerId', how='left')
playerWinsAndTotals['winPct'] = playerWinsAndTotals['wins']/playerWinsAndTotals['totalCount'] * 100
playerWinsAndTotals
_____________________________________________
playerId wins totalCount winPct
0 1670 483 961 50.260146
1 1748 474 919 51.577802
2 2179 468 837 55.913978
3 4006 434 839 51.728248
4 1668 392 712 55.056180
...
现在,我在这里发布这篇文章的原因是我知道我没有充分利用 Pandas 提供的功能。创建和合并两个不同的数据帧只是为了找到玩家获胜的比率似乎没有必要。我觉得我走的是“风景”路线。
对于比我更有经验的人,你会如何解决这个问题?