当要拆分的字符串数不确定时,在分隔符上拆分 Dataframe 列

Split Dataframe column on delimiter when number of strings to split is not definite

我有一个数据框如下:

    A              B
0   33590104       3359017;3359011;3359031
1   53340311       5334012
2   160750035      16075131;16075132;16075135;16075046
3   10510044       1051012;1051097;1051010;1051051;1051089;105106...
4   51540061       5154036

我希望 A 中的每个值都有行,B 中的每个值由“;”分隔如下图

   A              B
   33590104       3359017
   33590104       3359011
   33590104       3359031
   53340311       5334012
   160750035      16075131
   160750035      16075132
   160750035      16075135
   160750035      16075046

等等....

我的想法是先把B列的字符串转成列表。例如:

        A              B
   0    33590104       [3359017,3359011,3359031]
   1    53340311       [5334012]
   2    160750035      [16075131,16075132,16075135,16075046]

然后使用分解函数。但我不知道如何使用定界符 ';' 转换字符串到一个列表。我也不知道到底有多少字符串被';'分隔在每一行中。正如您在上面的示例中所见,每一行都不同。

您可以在 .map() 方法中使用字符串 .split() 将字符串转换为列表:

df['B'] = df['B'].map(lambda x: x.split(';'))

然后使用.explode():

df.explode('B').reset_index(drop=True)

您可以使用方法 split and explode:

df['B'] = df['B'].str.split(';')
df.explode('B', ignore_index=True)

df.assign(B=df['B'].str.split(';')).explode('B', ignore_index=True)

输出:

            A          B
0    33590104    3359017
1    33590104    3359011
2    33590104    3359031
3    53340311    5334012
4   160750035   16075131
5   160750035   16075132
6   160750035   16075135
7   160750035   16075046
8    10510044    1051012
9    10510044    1051097
10   10510044    1051010
11   10510044    1051051
12   10510044    1051089
13   10510044  105106...
14   51540061    5154036