Панды, управляющие строками в двух столбцах

#string #pandas

#строка #панды

Вопрос:

Вот мой фрейм данных:

            A                B
0   asdf|afsdf|fasd    sdsd|wer|wer
1   sdfsdf             sdfsdff
2   sdf|s              sdfsde|sdf
  

Я хотел бы сформировать столбец C , который содержал бы объединенные значения из столбца A и столбца B до первого | , а если | нет, то он просто объединит два столбца. Также при объединении я хотел бы вставить --
вот как C должен выглядеть столбец:

          C
0   asdf--sdsd
1   sdfsdf--sdfsdff
2   sdf--sdfsde
  

Я могу просмотреть каждую строку df.loc и получить то, что мне нужно, но это медленно, и мне интересно, есть ли более быстрый способ сделать это.

Ответ №1:

Может быть более причудливый способ, но это работает:

 In [1]: import pandas as pd

In [2]: d = {'A': ('asdf|afsdf|fasd', 'sdfsdf', 'sdf|s'),
             'B': ('sdsd|wer|wer', 'sdfsdff', 'sdfsde|sdf')}

In [3]: data = pd.DataFrame(d)

In [4]: data['C'] = data['A'].str.split('|').str.get(0)   "--"   data['B'].str.split('|').str.get(0)

In [5]: data
Out[5]: 
                 A             B                 C
0  asdf|afsdf|fasd  sdsd|wer|wer       asdf--sdsd
1           sdfsdf       sdfsdff  sdfsdf--sdfsdff
2            sdf|s    sdfsde|sdf      sdf--sdfsde
  

Ссылки на работу со строками в pandas можно найти в их документации.

Ответ №2:

Краткий ответ с использованием str и split

 df['C'] = df.A.str.split('|').str.get(0).add('--') 
          df.B.str.split('|').str.get(0)
df
  

введите описание изображения здесь


Вы можете расширить это дальше

 df['C'] = df.A.str.split('|', expand=True).stack() 
    .add('--').add(df.B.str.split('|', expand=True).stack()) 
    .groupby(level=0).apply('|'.join)
df
  

введите описание изображения здесь