将多个动态数据框写入Excel工作簿

时间:2019-05-16 20:11:12

标签: python excel pandas

我正在寻找有关过滤不同数据框以导出到工作表的帮助。这是一个示例数据框。

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多个类别。有没有办法创建一个函数来适当地切片并过滤后踢出数据帧?

1 个答案:

答案 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}")