在 Pandas 数据帧上执行拆分并创建一个新帧

Performing Split on Pandas dataframe and create a new frame

我有一个 pandas 数据框,其中有一列是这样的:

Merged_Cities
纽约、威斯康星、亚特兰大
东京、京都、铃木
巴黎、波尔多、里昂
孟买、德里、班加罗尔
伦敦、曼彻斯特、伯明翰

我想要一个输出如下的新数据框:

Merged_Cities 城市
纽约、威斯康星、亚特兰大 纽约
纽约、威斯康星、亚特兰大 威斯康星州
纽约、威斯康星、亚特兰大 亚特兰大
东京、京都、铃木 东京
东京、京都、铃木 京都
东京、京都、铃木 铃木
巴黎、波尔多、里昂 巴黎
巴黎、波尔多、里昂 波尔多
巴黎、波尔多、里昂 里昂
孟买、德里、班加罗尔 孟买
孟买、德里、班加罗尔 德里
孟买、德里、班加罗尔 班加罗尔
伦敦、曼彻斯特、伯明翰 伦敦
伦敦、曼彻斯特、伯明翰 曼彻斯特
伦敦、曼彻斯特、伯明翰 伯明翰

简而言之,我想将所有城市分成不同的行,同时保持 'Merged_Cities' 列。

这是 df 的可复制版本:

df = pd.DataFrame({'Merged_Cities':['New York, Wisconsin, Atlanta',
                                    'Tokyo, Kyoto, Suzuki',
                                    'Paris, Bordeaux, Lyon',
                                    'Mumbai, Delhi, Bangalore',
                                    'London, Manchester, Bermingham']})

使用.str.split().explode():

df = df.assign(Cities=df["Merged_Cities"].str.split(", ")).explode("Cities")
print(df)

打印:

                    Merged_Cities      Cities
0    New York, Wisconsin, Atlanta    New York
0    New York, Wisconsin, Atlanta   Wisconsin
0    New York, Wisconsin, Atlanta     Atlanta
1            Tokyo, Kyoto, Suzuki       Tokyo
1            Tokyo, Kyoto, Suzuki       Kyoto
1            Tokyo, Kyoto, Suzuki      Suzuki
2           Paris, Bordeaux, Lyon       Paris
2           Paris, Bordeaux, Lyon    Bordeaux
2           Paris, Bordeaux, Lyon        Lyon
3        Mumbai, Delhi, Bangalore      Mumbai
3        Mumbai, Delhi, Bangalore       Delhi
3        Mumbai, Delhi, Bangalore   Bangalore
4  London, Manchester, Bermingham      London
4  London, Manchester, Bermingham  Manchester
4  London, Manchester, Bermingham  Bermingham

这与@AndrejKesely 的回答非常相似,只是它合并了 df 及其索引中的城市。

# Create pandas.Series from splitting the column on ', '
s = df['Merged_Cities'].str.split(', ').explode().rename('Cities')

# Merge df with s on their index
df = df.merge(s, left_index=True, right_index=True)

# Result
print(df)
                    Merged_Cities      Cities
0    New York, Wisconsin, Atlanta    New York
0    New York, Wisconsin, Atlanta   Wisconsin
0    New York, Wisconsin, Atlanta     Atlanta
1            Tokyo, Kyoto, Suzuki       Tokyo
1            Tokyo, Kyoto, Suzuki       Kyoto
                    Merged_Cities      Cities
0    New York, Wisconsin, Atlanta    New York
0    New York, Wisconsin, Atlanta   Wisconsin
0    New York, Wisconsin, Atlanta     Atlanta
1            Tokyo, Kyoto, Suzuki       Tokyo
1            Tokyo, Kyoto, Suzuki       Kyoto
1            Tokyo, Kyoto, Suzuki      Suzuki