Pandas 将长字符串列动态操作为 2 列的数据框

Pandas dataframe manipulating with long string column to 2 columns dynamically

我有数据框:

id 问候姓名
1 你好+彼得|再见+约翰
2 hi+cheff|gutentag+rudolf|goodafternoon+Alex

我想要

id 问候语 姓名
1 你好 彼得
1 再见 约翰
2 厨师
2 gutentag 鲁道夫
2 下午好 亚历克斯

我不知道如何动态拆分列 greetingsname,以获得我想要的,因为列 greetingsname 具有不同的字符串长度。但是分隔符分布保持不变greeting DELIMETER(+) name DELIMETER(|) greeting DELIMETER(+) name

从这个意义上说,它可以有不同的长度(几个名字和问候语,在另一列中有不同数量的名字和问候语)

感谢

我们可以试试extractall

df.set_index('id')['greetingsname']\
  .str.extractall(r'(?P<greeting>[^+|]+)\+(?P<name>[^|]+)').droplevel(1)

         greeting    name
id                       
1           hello   peter
1         goodbye    john
2              hi   cheff
2        gutentag  rudolf
2   goodafternoon    Alex

你可以为此使用爆炸:

df['greetingsname']=df['greetingsname'].apply(lambda x: x.split('|'))

res=df.explode('greetingsname')

print(res)

   id       greetingsname
0   1         hello+peter
0   1        goodbye+john
1   2            hi+cheff
1   2     gutentag+rudolf
1   2  goodafternoon+Alex

res[['greeting', 'name']] = res['greetingsname'].str.split('+', expand=True)

del res['greetingsname']

res.reset_index(drop=True, inplace=True)

print(res)

   id       greeting    name
0   1          hello   peter
1   1        goodbye    john
2   2             hi   cheff
3   2       gutentag  rudolf
4   2  goodafternoon    Alex