Depois do método explode e o tratamento dos caracteres para transformação das coluna numéricas, os dados na célula viram uma lista.
df_p1 = df_p1.explode(list(df_p1.columns)[1:]).reset_index(drop=True)
df_p1['Valor da compra'] = df_p1['Valor da compra'].apply(lambda x: x.replace('R$', '').replace(',','.').split())
Na coluna 'Valor da compra', o resultado saí de R$ XX,YY para [XX.YY] em cada linha dessa coluna (um único elemento)
A minha solução foi usar novamente o método explode para eliminar essa dualidade, garantindo a não criação de linhas inexistentes já que é uma lista de um único elemento correspondendo à linha que a originou.