Ao definir o índice de um DataFrame pandas, o último elemento da matriz de colunas não mescla/agrupa itens.
Supondo os seguintes dados de teste:
test_data = {
"desk": ["DESK1", "DESK2", "DESK3", "DESK4", "DESK5", "DESK6", "DESK7", "DESK8", "DESK9", "DESK10"],
"phone": ["111-1111", "111-1111", "111-1111", "111-1111", "444-4444", "444-4444", "111-1111", "111-1111", "123-4567", "123-4567"],
"email": ["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"],
"team1": ["Adam", "xxxx", "Tiana", "", "Gina", "Gina", "Ruby", "Becca", "John", ""],
"team2": ["", "", "Dime", "", "Ed", "", "", "", "Fa", "Tim"],
}
Criado um DataFrame:
import io
import pandas as pd
from django.http.response import HttpResponse
from rest_framework import status
### Create DataFrame from test_data
df = pd.DataFrame(test_data)
Em seguida, tente escrever e retornar o arquivo
### Write & return the file
with io.BytesIO() as buffer:
with pd.ExcelWriter(buffer) as writer:
df: pd.DataFrame = df
groupby_columns = ['desk', 'phone', 'email']
df.set_index(groupby_columns, inplace=True, drop=True, append=False )
df.to_excel(writer, index=True, sheet_name="Team Matrix", merge_cells=True)
return HttpReponse(
buffer.getvalue(),
headers={
"Content-Type": "application/vnd.openxmlformats-" "officedocument.spreadsheetml.sheet",
"Content-Disposition": "attachment; filename=excel-export.xlsx",
},
status=status.HTTP_201_CREATED,
)
Que retorna o seguinte arquivo: Returned Excel File
Mas o que eu quero é que as três primeiras colunas (mesa, telefone, e-mail) sejam mescladas se os mesmos dados, o que com o código acima faz para a coluna mesa e telefone, mas a coluna telefone não agrupa/mescla como as outras duas. Arquivo Excel Devolvido Desejado
Uma solução possível, coloque
""
valores vazios ( ) nas células que você deseja e depois mescle as células:Isso criará um novo dataframe com células vazias:
Estampas:
Esta etapa mesclará as 3 primeiras colunas no Excel:
Cria
out.xlsx
(captura de tela do LibreOffice):