title: How to create multiple dataframes using multiple functions
body: <p>I quite often write a function to return different dataframes based on the parameters I enter. Here's an example dataframe:</p>
  
  <pre><code>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='M'), 10000)})
  </code></pre>
  
  <p>I then created a function to perform sub-totals for me like this:</p>
  
  <pre><code>def some_fun(DF1, agg_column, myList=[], *args):
      y = pd.concat([
      DF1.assign(**{x:'[Total]' for x in myList[i:]})\
              .groupby(myList).agg(sumz = (agg_column,'sum')) for i in range(1,len(myList)+1)]).sort_index().unstack(0)
      return y
  </code></pre>
  
  <p>I then write out lists that I'll pass as arguments to the function:</p>
  
  <pre><code>list_one = [pd.Grouper(key='Date',freq='A'),'Category','Product']
  list_two = [pd.Grouper(key='Date',freq='A'),'Category','Sub-Category','Sub-Category-2']
  list_three = [pd.Grouper(key='Date',freq='A'),'Sub-Category','Product']
  </code></pre>
  
  <p>I then have to run each list through my function creating new dataframes:</p>
  
  <pre><code>df1 = some_fun(df,'Units_Sold',list_one)
  df2 = some_fun(df,'Dollars_Sold',list_two)
  df3 = some_fun(df,'Units_Sold',list_three)
  </code></pre>
  
  <p>I then use a function to write each of these dataframes to an Excel worksheet. This is just an example - I perform this same exercise 10+ times. </p>
  
  <p>My question - is there a better way to perform this task than to write out df1, df2, df3 with the function information applied? Should I be looking at using a dictionary or some other data type to do this my pythonically with a function? </p>