Создать новые строки используя часть значений из других строк
У меня есть dataFrame с набором данных такого вида(в столбце Spisok_STS может быть n СТС, разделитель - запятая):
user_id;Spisok_STS;grz
1;50XE516421;Н123ЕТ150
2;9942987177;Т321НТ178
3;5144574666;NaN
4;9928966790,5133657517;В111ТУ31
Мне требуется найти все строки с 2 и более СТС и оставить по одному СТС в каждой строке:
user_id;Spisok_STS;grz
1;50XE516421;Н127ЕТ150
2;9942987177;Т648НТ178
3;5144574666;NaN
4;9928966790;В955ТУ43
4;5133657517;В955ТУ43
Подскажите, как это можно сделать?
UPDATE: Попробовал решить через цикл, но, кажется, это далеко не самое лучшее решение.
for i in range(len(df.index)):
if "," in df['Spisok_STS'][i]:
pos = df['Spisok_STS'][i].find(',')
part1 = df['Spisok_STS'][i][:pos]
part2 = df['Spisok_STS'][i][pos + 1:]
user_id_i = df['user_id'][i]
df.loc[len(df.index)] = [user_id_i, part2, 0]
df.loc[i, 'Spisok_STS'] = part1
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Режем строки в столбце Spisok_STS по запятым, получаем списки. Потом "эксплодим" (преобразуем каждый элемент списка в строку, повторяя значения индекса) этот столбец.
df = pd.DataFrame(
{'user_id': [1, 2, 3, 4], 'Spisok_STS': ['50XE516421', '9942987177', '5144574666', '9928966790,5133657517'],
'grz': ['Н123ЕТ150', 'Т321НТ178', np.nan, 'В111ТУ31']})
df = df.assign(Spisok_STS=lambda x:x.Spisok_STS.str.split(",")).explode('Spisok_STS')
print(df)
user_id Spisok_STS grz
0 1 50XE516421 Н123ЕТ150
1 2 9942987177 Т321НТ178
2 3 5144574666 NaN
3 4 9928966790 В111ТУ31
3 4 5133657517 В111ТУ31