python - 使用 Pandas 的 id 的最大连续行?
问题描述
我对熊猫很陌生。我有两个与两个玩家游戏相关的数据框
DF1:matches # match information
match_num winner_id loser_id
270 201504 201595
271 201514 201426
272 201697 211901
273 201620 211539
274 214981 203564
DF2: players #information about the players
playerid First Name Last Name Country
200001 Martina Hingis SUI
200002 Mirjana Lucic CRO
200003 Justine Henin BEL
完整数据:https ://drive.google.com/file/d/1QHglO3DkZPDFvqHH-jJYDbYh3jylo2-C/view?usp=sharing
我需要找出哪些球员连续赢得最多比赛?
这可以使用sql函数解决吗?
提前致谢!!
解决方案
您提供的示例并不是真正有用,因为每个 id 不超过一个匹配项。这是一个更好的:
match_num winner_id loser_id
0 270 3 2
1 271 2 3
2 272 3 4
3 273 4 1
4 274 2 4
我提出的 pandas 解决方案有点冗长。我们首先使用 , 将数据框重塑为长格式melt
,并按匹配排序。然后我们计算一个对应于相同类型(赢/输)的连续匹配的组。最后,我们只保留胜利,计算组大小(即连续获胜的次数)并排序。
(df.melt(id_vars='match_num',
var_name='wl',
value_name='ID')
.sort_values(by=['ID', 'match_num'])
.assign(group=lambda d: d.groupby('ID')['wl'].apply(lambda s: s.ne(s.shift()).cumsum()))
.query('wl == "winner_id"')
.groupby(['ID', 'group']).size()
.sort_values(ascending=False)
.droplevel('group')
.rename('consecutive_win')
.to_frame()
)
输出:
consecutive_win
ID
2 2
3 1
3 1
4 1
推荐阅读
- javascript - Turbolinks 实现 document.ready,点击切换
- jquery - 如何使用ajax下载文件
- excel - 当相邻列中的相应行具有特定值时,计算列中非空单元格的总和 - VBA 或公式?
- web-audio-api - Opus 和 WebAudio 编码/重采样兼容性
- java - H2 单元测试别名抱怨别名“AS [*]”
- sql - 从 SQL 转换为 HQL
- java - 从 Jenkins Scripted Pipeline 启动多个 jars
- c# - C#将日期属性设置为另一个属性的最大数据
- javascript - Sanity.io - 用于预览/选择的图像 URL 曝光
- python - 如何实时显示股票价格数据的变化?