#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