Вот как выглядит подмножество моих данных:
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 от него. Я попытался добавить второй аргумент в группу, но ячейки суммировались по всей строке. Кроме того, все жестко запрограммировано и должно быть в списке.
Я уверен, что есть способ поместить мои категории в список и выполнить итерацию, но я не достаточно квалифицирован, чтобы понять это. Я мог бы просто жестко закодировать вышеупомянутое снова и снова, чтобы попасть туда, но я знаю, что есть лучший способ.
Кто-нибудь может помочь?