Суммируйте несколько строк на основе совпадающих столбцов для всех остальных столбцов - PullRequest
0 голосов
/ 14 января 2020

Вот как выглядит подмножество моих данных:

Facility     	Department    	 Fin Cat 1     	Fin Cat 2    	1/31/2018	 2/28/2018   	 3/31/2018....
ABC          	Selling        	Personnel     	Salaries    	200	250	200
DEF       	Admin          	Misc          	Supplies    	300	125	50
GHI          	Selling        	Facility      	Property Tax	200	100	125
ABC          	Admin          	Personnel     	Salaries    	90	100	200
DEF       	Admin          	Misc          	Supplies    	125	60	800

Столбцы go из 36, и я хочу сделать диапазон дат доступным для выбора, и в нем более 4000 строк.

Средство содержит 16 различных значений, У отдела, вероятно, 40 разных значений, у Fincat 100 разных значений, а у Fin Cat 2, вероятно, 200 разных значений.

Я хочу создать файл Excel, который выглядит как (это лишь небольшая часть строк и столбцов) :

Facility     	Department    	 Fin Cat 1     	Fin Cat 2    	1/31/2018	 2/28/2018   	 3/31/2018....
ABC          	Selling        	Personnel     	Salaries    	200	250	200
ABC          	Admin          	Personnel     	Salaries    	90	100	200
ABC          	Admin          	Personnel     	Benefits	100	100	125
GHI          	Selling        	Facility      	Property Tax	200	100	125
DEF       	Admin          	Misc          	Supplies    	425	185	850

Я успешно использовал следующий код:

import numpy as np
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
from openpyxl import load_workbook

#Set number of columns appropriate to the spreadsheet
pd.set_option('display.max_columns', 100)

excel_file = "sourcefile"

#Read in the excel file
df = pd.read_excel(excel_file)

#Establish the report parameters
facility = "ABC"
dept = "Selling"
fincat1 = "Miscellaneous"
fincat2 = "Supplies"

#Drill down to the specific section of data I want
df2 = (df.loc[(df['Facility Name'] == facility) & (df["Department"] == dept) & (df['Financials Category 1'] == fincat1)])

#Group and sum common cat 2 items
df3 = df2.groupby(['Financial Category 2'], as_index=False).sum()

#open the final report workbook. A preconfigured worksheet is worksheet1 with charts based on the data from this operation written to a second WS
fname = 'FinalReport'
sheet = 'DATA'
with ExcelWriter(fname, engine='openpyxl') as writer:
    writer.book = load_workbook(fname)
    if sheet in writer.book:
        del writer.book[sheet]
    df3.to_excel(writer, sheet)

Теперь это прекрасно работает, но я могу получить только данные категории FinCat1 от него. Я попытался добавить второй аргумент в группу, но ячейки суммировались по всей строке. Кроме того, все жестко запрограммировано и должно быть в списке.

Я уверен, что есть способ поместить мои категории в список и выполнить итерацию, но я не достаточно квалифицирован, чтобы понять это. Я мог бы просто жестко закодировать вышеупомянутое снова и снова, чтобы попасть туда, но я знаю, что есть лучший способ.

Кто-нибудь может помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...