Создать логическую маску для тестовой строки [edit]
на str.contains
, затем разделить столбец по пробелу с первым (
или [
, заменить несоответствующие значения на NaN
на where
и заполнить пропущенные значения в столбце A
.Функция insert
предназначена для нового столбца в первой позиции.Последнее удалите одинаковые значения в обоих столбцах на boolean indexing
и создайте индекс по умолчанию на reset_index
:
mask = df['Col'].str.contains('[edit]', regex=False)
df['B'] = df.pop('Col').str.split('\s+\(|\s+\[', n=1).str[0]
df.insert(0, 'A', df['B'].where(mask).ffill())
df = df[df['A'] != df['B']].reset_index(drop=True)
print (df)
A B
0 Honda Accord
1 Honda Civic
2 Honda Pilot
3 Toyota Prius
4 Toyota Highlander
5 Ford Explorer
Другое решение:
items = []
for x in df['Col']:
if x.endswith('[edit]'):
a = x.rstrip(' [edit]')
else:
b = x.split('(')[0].strip()
items.append((a, b))
df = pd.DataFrame(items, columns=['A', 'B'])
print (df)
A B
0 Honda Accord
1 Honda Civic
2 Honda Pilot
3 Toyota Prius
4 Toyota Highlander
5 For Explorer