Tenho um dataframe de coluna única semelhante a este:
cat = { 'cat': ['a','b','c-',' -d','e']}
df = pd.DataFrame(cat)
>>> print(df)
cat
0 a
1 b
2 c-
3 -d
4 e
Preciso mesclar as linhas 2 e 3:
cat
0 a
1 b
2 cd
3 e
Estou tentando usar regex, já que esses dados multilinhas são sempre do formato "-\n {8}-". No entanto, isso não funciona:
df['cat'] = df['cat'].str.replace("-\n {8}-","",flags=re.M)
Não consigo usar nenhuma técnica de agrupamento, então estou meio travado. Obrigado por qualquer sugestão.
Você pode usar uma
groupby
abordagem identificando as strings que terminam-
ou começam com{8}-
:Saída:
Intermediários:
Ou sem pandas,
join
todas as strings com um separador personalizado (por exemplo\n
, substituirsplit
novamente):Saída:
Eu faria assim:
Impressões:
Outra solução possível, que se baseia nos seguintes passos:
Ele atualiza o valor na célula no índice da linha
n
e na colunacat
. Este novo valor é calculado adicionando o valor atual emcat
ao valor na próxima linha (n+1
) dacat
coluna, usando uma string vazia para preencher quaisquer valores ausentes. O resultado é então limpo removendo quaisquer ocorrências do padrão'-\n {8}-'
, e o valor do índice da linhan
desta série limpa é atribuído de volta adf.loc[n, 'cat']
.Em seguida, ele remove a linha no índice
n+1
do dataframe e redefine o índice para garantir que ele seja contínuo, descartando o índice antigo.Saída: