Вам не нужно группировать, чтобы сделать это, просто нужно отфильтровать набор данных. (Если вам нужно сгруппировать, чтобы получить агрегаты, сначала сделайте это, а затем начните с нижеуказанного.)
Вам также необходимо установить xlsxwriter, используя pip install xlsxwriter
Общая идея состоит в том, чтобы найти уникальные группировки и выполнить итерацию по ним, отфильтровывая набор данных и записывая их на каждый лист.
import pandas as pd
import random
# Create randomized dataframe
df = pd.DataFrame({'Year':[random.choice(['2010', '2011', '2012']) for _ in range(100)],
'Scenario':[random.choice(['Plan', 'Actuals', 'Fcsst']) for _ in range(100)],
'Val':list(range(0, 100))})
# You can sort values here if you want, but you don't have to
df = df.sort_values(['Year', 'Scenario'])
df.head()
Year Scenario Val
5 2010 Actuals 5
14 2010 Actuals 14
31 2010 Actuals 31
64 2010 Actuals 64
69 2010 Actuals 69
# Define your list of unique concatenations of Year and Scenario.
unique_ys = df[['Year', 'Scenario']].drop_duplicates().values.tolist()
#or
unique_ys = list(df.groupby(['Year', 'Scenario']).groups)
unique_ys
[('2010', 'Actuals'),
('2010', 'Fcsst'),
('2010', 'Plan'),
('2011', 'Actuals'),
('2011', 'Fcsst'),
('2011', 'Plan'),
('2012', 'Actuals'),
('2012', 'Fcsst'),
('2012', 'Plan')]
# Initialize a writer object, and determine the filename
writer = pd.ExcelWriter('finance_file.xlsx', engine='xlsxwriter')
# Iterate through unique concatenations, filter the datasets and write them to each sheet.
for list_ in unique_ys:
df[(df.Year == list_[0]) & (df.Scenario == list_[1])].to_excel(writer,
sheet_name=list_[0]+' '+list_[1],
index=False)
# Close the Pandas Excel writer and output the Excel file.
writer.save()