我正在寻找有关过滤不同数据框以导出到工作表的帮助。这是一个示例数据框。
import pandas as pd
import numpy as np
np.random.seed(1111)
df = pd.DataFrame({
'Category':np.random.choice( ['Group A','Group B','Group C','Group D'], 10000),
'Sub-Category':np.random.choice( ['X','Y','Z'], 10000),
'Sub-Category-2':np.random.choice( ['G','F','I'], 10000),
'Product':np.random.choice( ['Product 1','Product 2','Product 3'], 10000),
'Units_Sold':np.random.randint(1,100, size=(10000)),
'Dollars_Sold':np.random.randint(100,1000, size=10000),
'Customer':np.random.choice(pd.util.testing.rands_array(10,25,dtype='str'),10000),
'Date':np.random.choice( pd.date_range('1/1/2016','12/31/2018',
freq='D'), 10000)})
以下是我要导出到Excel工作簿中的不同数据框:
df1 = df.groupby(['Category','Sub-Category-2','Product']).agg({'Units_Sold':'sum'})
df2 = df.groupby(['Category','Product',pd.Grouper(key='Date',freq='A-APR')]).agg({'Dollars_Sold':'sum'})
df3 = df.groupby(['Category','Product','Sub-Category']).agg({'Units_Sold':'sum','Dollars_Sold':'sum'})
对于每个“类别”,我想创建一个单独的Excel工作簿,并对其中的每个数据框进行过滤,以仅显示该特定“类别”。例如,工作簿“ Group A”将在其中具有df1,df2和df3作为单独的工作表,而数据框仅显示“ Category” =“ Group A”的值。工作簿“ B组”将具有相同的信息,只是在“ Category” =“ B组”的地方进行过滤。
我知道如何使用.loc手动执行此操作,但这似乎很慢。我的问题是如何以pythonic方式执行此操作?示例数据并不大,但是我的真实数据在“类别”中有30多个类别。有没有办法创建一个函数来适当地切片并过滤后踢出数据帧?
答案 0 :(得分:0)
只是跑步
for c in df.Category.unique():
with pd.ExcelWriter(f"/Users/constantino/Desktop/{c}.xlsx") as writer:
for i, d in enumerate([df1, df2, df3]):
d.loc[c].to_excel(writer, sheet_name=f"df{i+1}")