Oii, Rafael! Tudo bem?
Peço desculpas pela demora para te responder.
Considerando o contexto que relatou, isso acontece porque o método withColumnRenamed retorna um novo DataFrame com a coluna renomeada. No seu loop, está sobrescrevendo o DataFrame estabelecimentos (ou 'socios') a cada iteração, mas sempre com base no DataFrame original, e não no DataFrame modificado na iteração anterior.
Entendido isso, apenas a primeira coluna é renomeada, pois nas iterações seguintes você está trabalhando sempre com o DataFrame original.
Como sugestão, a solução para isso seria garantir que o DataFrame seja modificado a cada iteração.
Um exemplo seria:
for index, colName in enumerate(estabsColNames):
estabelecimentos = estabelecimentos.withColumnRenamed(f"_c{index}", colName)
for index, colName in enumerate(sociosColNames):
socios = socios.withColumnRenamed(f"_c{index}", colName)
No código acima, ele está renomeando as colunas em ambos DataFramescom base nas listas estabsColNames e sociosColNames, de modo que as alterações de todas as iterações sejam preservadas.
Espero ter ajudado. Continue se dedicando aos estudos e qualquer dúvida, compartilhe no fórum.
Bons estudos, Rafael!