根据字符串(正则表达式)将一行拆分为更多行

Split a row into more rows based on a string (regex)

我有这个 df,我想拆分它:

cities3 = {'Metropolitan': ['New York', 'Los Angeles', 'San Francisco'],
           'NHL': ['RangersIslandersDevils', 'KingsDucks', 'Sharks']}
cities4 = pd.DataFrame(cities3)

获得像这样的新 df:(请点击图片)

我可以使用什么代码?

您可以使用以下正则表达式,根据一个大写字母和一个小写字母来拆分您的列:

(?<=[a-z])(?=[A-Z])

然后您可以使用 this answer 中描述的技术将该列替换为其分解版本:

cities4 = cities4.assign(NHL=cities4['NHL'].str.split(r'(?<=[a-z])(?=[A-Z])')).explode('NHL')

输出:

    Metropolitan        NHL
0       New York    Rangers
0       New York  Islanders
0       New York     Devils
1    Los Angeles      Kings
1    Los Angeles      Ducks
2  San Francisco     Sharks

如果你想重置索引(到 0..5)你可以这样做(在上面的命令之后或者作为它的一部分)

cities4.reset_index().reindex(cities4.columns, axis=1)

输出:

    Metropolitan        NHL
0       New York    Rangers
1       New York  Islanders
2       New York     Devils
3    Los Angeles      Kings
4    Los Angeles      Ducks
5  San Francisco     Sharks