У меня есть фрейм данных "fpd", который разделен на уникальные значения в столбце ['View']
, используя
bookuniques = fpd['View'].unique()
fpdict = {elem: pd.DataFrame for elem in bookuniques}
for key in fpdict.keys():
fpdict[key] = fpd[:][fpd['View'] == key]
Фрейм данных выглядит так:
Product PG Location Row Group Ph DD Pd TC Variance
C4 CL 01.1 OI OpeningInventory 200 200
PU 01.1 OI OpeningInventory 400 400
MR 01.1 OI OpeningInventory 600 600
NP 01.1 OI OpeningInventory 200 200
PR 01.1 OI OpeningInventory 400 400
PS 01.1 OI OpeningInventory 600 600
PW 01.1 OI OpeningInventory 200 200
Я пытаюсь добавить строку суммы для каждого из этих фреймов данных по отдельности. Я попытался включить процесс на выходе, чтобы преуспеть, используя
with pd.ExcelWriter('check2.xlsx') as writer:
for key in fpdict.keys():
fpdict[key].drop(['View'], axis = 1)
fpdict[key].append(fpdict[key].sum(numeric_only = True), ignore_index=True)
temp = fpdict[key]
temp.to_excel(writer, sheet_name = key)
К сожалению, при этом удаляет столбцы индекса [['Product'],['PG'],['Location']]
Я хотел бы, чтобы вывод был
Product PG Location Row Group Ph DD Pd TC Variance
C4 CL 01.1 OI OpeningInventory 200 200
PU 01.1 OI OpeningInventory 400 400
MR 01.1 OI OpeningInventory 600 600
NP 01.1 OI OpeningInventory 200 200
PR 01.1 OI OpeningInventory 400 400
PS 01.1 OI OpeningInventory 600 600
PW 01.1 OI OpeningInventory 200 200
TOTAL 2600 2600
@SergeBallesta Я еще нет - нужно ли мне удалить иерархическую индексацию, чтобы использовать это?
Обновление @SergeBallesta - попробовал, и ничего не произошло
Без минимальный воспроизводимый пример мы не сможем помочь...
@SergeBallesta Я воспроизвел вывод и задокументировал желаемый результат.
Вот предположения, которые я должен сделать, потому что это четко не указано в вопросе:
View
Вы должны изменить свой код на:
with pd.ExcelWriter('check2.xlsx') as writer:
for key in fpdict.keys():
temp = fpdict[key].drop(['View'], axis = 1).reset_index()
temp.append(fpdict[key].sum(numeric_only = True), ignore_index=True) # add sum row
temp.iloc[-1] = temp.iloc[-1].fillna(' ') # replace NaNs with ''
temp.iloc[-1, 1] = 'TOTAL'
fpdict[key] = temp.set_index(['Product', 'PG', 'Location'])
temp.to_excel(writer, sheet_name = key)
Я попробую - что касается вопроса, я хотел бы знать, как я могу сделать это лучше. Я не уверен, как выделить отдельные слова, чтобы визуально идентифицировать их как индекс - я пробовал с форматированием, но получилось беспорядочно. Есть ли ресурс для форматирования фреймов данных? В следующий раз я обязательно укажу желаемый вывод для других полей - я думал, что это ясно из вопроса, но я понимаю, почему это может сбивать с толку. Я также понимаю, что пропустил колонку просмотра - извиняюсь.
Единственное редактирование, которое мне пришлось сделать, это добавить перед строкой temp.append temp =. Спасибо тебе за помощь!
Кроме того, мне пришлось изменить temp.to_excel на fpdict[key], чтобы преуспеть, иначе вывод не сохранял индексированный формат.
Вы пробовали
groupby
:fpd.groupby('View').sum()
?