Python 多索引数据帧(Pandas)中组合的生成方法

Python 多索引数据帧(Pandas)中组合的生成方法,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我有一个多索引数据框,其中索引级别有多个类别,类似于: |Var1|Var2|Var3| |Level1|Level2|Level3|----|----|----| | A | A | A | | | | | A | A | B | | | | | A | B | A | | | | | A | B | B | | |

我有一个多索引数据框,其中索引级别有多个类别,类似于:

                     |Var1|Var2|Var3|
|Level1|Level2|Level3|----|----|----|
|  A   |  A   |   A  |    |    |    |
|  A   |  A   |   B  |    |    |    |
|  A   |  B   |   A  |    |    |    |
|  A   |  B   |   B  |    |    |    |
|  B   |  A   |   A  |    |    |    |
|  B   |  A   |   B  |    |    |    |
|  B   |  B   |   A  |    |    |    |
|  B   |  B   |   B  |    |    |    |
# Resulting df to be populated
df_result = pd.DataFrame([])
# Retrieving values at Level1
lev1s = df.index.get_level_values("Level1").unique()
# Looping through each Level1 value
for lev1 in lev1s:
   # Filtering df based on Level1 value
   df_lev1 = df.query('Level1 == ' + str(lev1))
   # Repeating...
   lev2s = df_lev1.index.get_level_values("Level2").unique()
   for lev2 in lev2s:
      df_lev2 = df_lev1.query('Level2 == ' + str(lev2))
      # ... until Level3
      lev3s = df_lev2.index.get_level_values("Level3").unique()
      # Creating all combinations
      combs = itertools.combinations(lev3s, 3)
      # Looping through each combination
      for comb in combs:
         # Filtering values in combination
         df_comb = df_wl.query('Level3 in ' + str(comb))
         # Calculating means using groupby (groupby might not be necessary, 
         # but I don't believe it has much of an impact
         df_means = df_comb.reset_index().groupby(['Level1', 'Level2']).mean()
         # Extending resulting dataframe
         df_result = df_result.append(df_means)
总之,特别是在我的例子中,级别1有2个级别,级别2有24个级别,级别3有6个级别,还有级别4(674)和级别5(9)(根据具体的更高级别值有一些微小的变化-
Level1==1
实际上有24个level2,但
Level1==2
有23)

我需要在第5级生成3的所有可能组合,然后计算变量1-3的平均值

我正在尝试这样的事情:

                     |Var1|Var2|Var3|
|Level1|Level2|Level3|----|----|----|
|  A   |  A   |   A  |    |    |    |
|  A   |  A   |   B  |    |    |    |
|  A   |  B   |   A  |    |    |    |
|  A   |  B   |   B  |    |    |    |
|  B   |  A   |   A  |    |    |    |
|  B   |  A   |   B  |    |    |    |
|  B   |  B   |   A  |    |    |    |
|  B   |  B   |   B  |    |    |    |
# Resulting df to be populated
df_result = pd.DataFrame([])
# Retrieving values at Level1
lev1s = df.index.get_level_values("Level1").unique()
# Looping through each Level1 value
for lev1 in lev1s:
   # Filtering df based on Level1 value
   df_lev1 = df.query('Level1 == ' + str(lev1))
   # Repeating...
   lev2s = df_lev1.index.get_level_values("Level2").unique()
   for lev2 in lev2s:
      df_lev2 = df_lev1.query('Level2 == ' + str(lev2))
      # ... until Level3
      lev3s = df_lev2.index.get_level_values("Level3").unique()
      # Creating all combinations
      combs = itertools.combinations(lev3s, 3)
      # Looping through each combination
      for comb in combs:
         # Filtering values in combination
         df_comb = df_wl.query('Level3 in ' + str(comb))
         # Calculating means using groupby (groupby might not be necessary, 
         # but I don't believe it has much of an impact
         df_means = df_comb.reset_index().groupby(['Level1', 'Level2']).mean()
         # Extending resulting dataframe
         df_result = df_result.append(df_means)
问题是,过了一会儿,这个过程变得非常缓慢。由于我有大约2*24*6*674个级别和84个组合(9个元素,3乘3),我预计将计算超过1600万个
df_平均值

有没有更有效的方法

多谢各位