Mancando i file XML di esempio, l'unica cosa che posso dirti è che ci sono alcune cose che non mi convincono.
Quando iteri sugli XML, metti tutti i valori di uno stesso tipo in un array. Quindi se file1.xml ha Gelato, 1, 2, 2, Caffè, 2, 1.5, 3 tu avrai un array ‘data’ fatto così:
[['Gelato','Caffè'],[1,2],[2,1.5],[2,3]]
Se il CSV ha le intestazioni (esplicite o implicite), ogni colonna in teoria è omogenea, quindi dovresti avere una colonna Descrizione, una Quantità, ecc. Ma con il tuo array avrai un CSV fatto così:
Che non è quello che volevi…
Quello che volevi è (penso) questo:
Per ottenere questo risultato devi iterare sugli XML in modo diverso, per ottenere questo array:
[['Gelato', 1, 2, 2], ['Caffè', 2, 1.5, 3]]
Con questa modifica dovresti risolvere il 95% dei tuoi problemi. Il restante 5% sarà composto dalle ‘varie ed eventuali’ che si intravedono nei tuoi screenshot, ma che per ora facciamo finta non esistano.