【发布时间】:2019-05-18 00:13:54
【问题描述】:
我正在寻求过滤不同数据框以导出到工作表的帮助。这是一个示例数据框。
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 工作簿,其中每个数据框都经过过滤,以仅显示特定的“类别”。例如,工作簿“A 组”将 df1、df2 和 df3 作为单独的工作表,其中数据框仅显示“类别”=“A 组”的值。工作簿“B 组”将具有相同的信息,只是在“类别”=“B 组”的位置过滤。
我知道如何使用 .loc 手动执行此操作,但这似乎很慢。我的问题是如何以 pythonic 方式执行此操作?示例数据不大,但我的真实数据在“类别”中有 30 多个类别。有没有办法创建一个函数来适当地切片并在过滤后踢出数据帧?
【问题讨论】: