Изменение формы таблицы с несколькими заголовками в python

#python #excel #pandas #dataframe

#python #excel #панды #фрейм данных

Вопрос:

Я новичок в python и пытаюсь изменить форму таблицы из файла Excel, поскольку у меня несколько заголовков, я пытаюсь преобразовать первый заголовок в 2 отдельных столбца. я прилагаю здесь свой вывод кода и данные. Входная таблица

 import pandas as pd
import numpy as nm

df = pd.read_excel(r'.test.xlsx', header=[0, 1])
df = (df.stack(0, dropna=False)
        .rename_axis(index=('Customer','Date'), columns=None)
        .reset_index())
df.to_csv(r'.testnew.csv',index=False)
print(df)
 

Печатный вывод — введите описание изображения здесь

Желаемый результат —

Заказчик Дата Бюджет Актуально Сумма
Джон 20 января 100 50 0
Джон 20 февраля
Джон 20 марта
Крис 20 января 120 80 0
Крис 20 февраля 50 10 20
Крис 20 марта 50 45

Ответ №1:

Я считаю, что вам нужно DataFrame.stack :

 df = pd.read_excel(r'.test.xlsx', header=[0, 1])

df = (df.stack(0, dropna=False)
        .rename_axis(index=('Customer','Date'), columns=None)
        .reset_index())
 

Комментарии:

1. Не работая должным образом, он преобразовал первую строку в столбец, но выдает несколько столбцов с одинаковым именем столбца и пустыми строками. что-то вроде имени клиента, даты, фактического, фактического, Суммы1, Суммы2, Суммы3….

2. @Annie — Так это значит, что в названиях столбцов есть опечатки? Возможно ли использование df = df.rename(columns=lambda x: x.lower()) после df = pd.read_excel(r'.test.xlsx', header=[0, 1]) ?

3. Я пытался использовать lower, но date не имеет меньшего значения, поэтому возникает ошибка. Я также прикрепил текущий вывод с отредактированным кодом в post. Пожалуйста, предложите @jezrael

4. @Annie — Как это изменить df = pd.read_excel(r'.test.xlsx', header=[0, 1]) df = pd.read_excel(r'.test.xlsx', header=[0, 1], index_col=[0]) ?

5. Понял… Большое вам спасибо, сейчас все работает нормально.