使用 Python pandas 将具有逗号值的字符串转换为多层索引的单独行
Posted
技术标签:
【中文标题】使用 Python pandas 将具有逗号值的字符串转换为多层索引的单独行【英文标题】:Turning a string with comma values into individual rows of a multi-layered index with Python pandas 【发布时间】:2020-10-02 03:41:17 【问题描述】:我有一个 Pandas 数据框,目前看起来像这样:
df = pd.DataFrame('Film' : ['James Bond: Spectre', 'Avengers: Endgame'],
'Year' : [2015, 2019],
'Director(s)': ['Sam Mendes', 'Anthony Russo, Joe Russo'],
'Actor(s)': ["Daniel Craig, Cristoph Waltz", "Robert Downey Jr., Chris Evans, Scarlett Johannson"])
Film | Year | Director(s) | Actor(s)
----------------------|------|--------------------|-----------------------
James Bond: Spectre | 2015 | Sam Mendes | Daniel Craig,
| | | Christoph Waltz
----------------------|------|--------------------|-----------------------
Avengers: Endgame | 2019 | Anthony Russo, Joe | Robert Downey Jr.,
| | Russo | Chris Evans, Scarlett
| | | Johansson
我想用每个字符串中的逗号分隔演员列和导演列,以便它们成为多层列,其中每个新条目占据一个单独的单元格,如下所示:
Film | Year | Director(s) | Actor(s)
----------------------|------|-------------------|----------------------
James Bond: Spectre | 2015 | Sam Mendes | Daniel Craig
| | |----------------------
| | | Christoph Waltz
----------------------|------|-------------------|----------------------
Avengers: Endgame | 2019 | Anthony Russo | Robert Downey Jr.
| | |----------------------
| |-------------------| Chris Evans
| | Joe Russo |----------------------
| | | Scarlett Johansson
我的首要任务是 Director(s) 列和 Actor(s) 列分别包含每个值,但两列的多层索引没有链接 - Anthony Russo 和 Robert Downey Jr. 没有内在联系他们与同一部电影的联系。
我对 Python 和 Pandas 还很陌生,所以我很欣赏这可能不是多索引的工作方式。如果有更有效的数据组织方式,我会很高兴听到!
【问题讨论】:
【参考方案1】:我认为 Pandas 的 explode() 函数可能会解决您的需求。在此处查看示例https://cmdlinetips.com/2019/07/pandas-0-25-0-is-here-what-is-new-named-aggregation-explode-and-sparse-dataframe/
【讨论】:
据我了解,explode() 函数将创建新行而不是将列拆分为多层索引? 这似乎接近你想要的。 (使用“演员”而不是演员) df.assign(Actor=df.Actor.str.split(',')).explode('Actor').set_index(['Film', 'Year'])跨度>以上是关于使用 Python pandas 将具有逗号值的字符串转换为多层索引的单独行的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 将具有多个值的行数据合并到列的 Python 列表中
具有先前值的 Python Pandas iterrows()
python 在Pandas中删除具有特定值的行(Python)