Используя str.extract
, str.split
, transform
и pd.concat
:
Мы можем сделать это в несколько шагов:
- Сначала мы извлекаем числа между
((( ... )))
- Затем мы разбиваем
,
и transform
строки на столбцы - Разбиваем каждые два числа на пробелы и
concat
новые данные располагаются рядом
temp = df['multi'].str.extract('\(\(\((.*)\)\)\)')[0].str.split(',', expand=True).T
df_new = pd.concat(
[temp[col].str.strip().str.split(' ', expand=True)\
.rename(columns={0:f'a_{n+1}', 1:f'b_{n+1}'})
for n, col in enumerate(temp.columns)], axis=1
)
Вывод
a_1 b_1 a_2 b_2 a_3 b_3
0 1.1 1.2 3.1 3.2 5.1 5.2
1 2.1 2.2 4.1 4.2 6.1 6.2
Более подробное объяснение:
list comprehension
может выглядеть довольно сложным, так пишется как обычный for loop
, это:
newdata = []
for n, col in enumerate(temp.columns):
dftemp = temp[col].str.strip().str.split(' ', expand=True)
dftemp = dftemp.rename(columns={0:f'a_{n+1}', 1:f'b_{n+1}'})
newdata.append(dftemp)
newdf = pd.concat(newdata, axis=1)