python - 在保持相同列的同时取消堆叠 Multiindex Pandas DataFrame
问题描述
我目前正在尝试从数据框中的特定列中提取文本数据并将其保存到新的数据框中。使用下面的代码片段,我可以提取我想要的模式,但对于我的生活,我无法弄清楚如何按照我喜欢的方式格式化它。我当前的数据框有一个多索引和四列,如下所示。在数据框中,每个索引对应的玩家名称在零到四个之间,我希望它们都在同一行上。在每个有多行对应于一个索引的情况下,第一行中玩家姓名上方的第二行中都有一个空白单元格,我只想合并这些行并将第一行中的空白替换为正下方的玩家姓名(如果有)。有什么办法可以做到这一点?对此的任何帮助将不胜感激。
regex_df = play_by_play_df['Play'].str.extractall(r'(\. )(.+?)( scored)|(.+?)( homered)|(.+?)( balked to score)|(.+?)( advanced on a wild pitch to score)|(.+?)( advanced on error to score)')[[1,3,5,7,9]].unstack(level='match').stack(level=0)
这是那行代码的输出。
match 0 1 2 3
2 1 Jason Heyward None None None
13 1 Kolten Wong None None None
38 1 Matt Carpenter None None None
91 3 JD Martinez None None None
94 1 NaN Yoenis Cespedes None None
3 Alex Avila NaN None None
127 1 Yoenis Cespedes None None None
这就是我希望我的数据框看起来的样子。
我的最终目标是提取在给定比赛中得分的每个球员的名字,并将该名字存储在一个新列中。以下是五种不同戏剧的示例,其中包含要从中提取名称的五种独特模式:
Play
2 Matt Holliday singled to right (Liner). Jason Heyward scored.
91 JD Martinez homered (Fly).
256 Lorenzo Cain advanced on a wild pitch to score.
331 Billy Hamilton balked to score. Joey Votto advanced to 2B.
8378 Nick Hundley advanced on error to score. DJ LeMahieu advanced to 2B on error. Error by Chris Heston.
我希望在此数据框中添加四个额外的列,每个列都包含一个得分的球员的名字(在给定的比赛中最多可以有四个球员得分)。显然会有很多空牢房,因为很少有四名球员在一场比赛中得分。
解决方案
我真的很感谢所有的帮助家伙!抱歉,如果我的问题提出得不好。经过一番挖掘,我终于解决了我的问题。解决方案非常简单。
regex_df = play_by_play_df['Play'].str.extractall(r'(\. )(.+?)( scored)|(.+?)( homered)|(.+?)( balked to score)|(.+?)( advanced on a wild pitch to score)|(.+?)( advanced on error to score)')[[1,3,5,7,9]].unstack(level='match').stack(level=0).reset_index(level=1, drop=True)
regex_df = regex_df.groupby(regex_df.index).first()
我最终所做的只是删除了多索引的第一级,从而使一些行具有相同的索引。从那里,我只是使用 groupby().first() 按索引分组并将非 NaN 值强制到顶行。我的结果如下所示:
推荐阅读
- apache-spark - 在不平衡数据集的情况下进行连接优化
- javascript - 班级中的班级?
- angular - 在通过角度材料的连接函数返回之前在 Observable 数据中添加属性
- typescript - 未推断出扩展接口的通用类型
- java - Spring RestTemplate 动态 JSON 属性名称
- yaml - Azure Pipeline YAML 与向导
- javascript - 由于 broccoliBuilderError,Ember 构建失败
- objective-c - 如何在 CFPreferencesSetAppValue 中设置整数?
- c# - 使用 Bouncy Castle 使用 CAdES-BES 签署文件
- slack - 自动更改肤色