问题描述
我有一个多索引数据框,其中索引级别具有多个类别,如下所示:
|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 | | | |
总而言之,特别是在我的情况下,级别1有2个级别,级别2有24个级别,级别3有6个级别,还有级别4(674)和级别5(9)(根据情况有一些细微变化)特定的更高级别的值-Level1 == 1
实际上有24个Level2,而Level1 == 2
有23个)。
我需要在5级生成所有3的可能组合,然后计算变量1-3的均值。
我正在尝试这样的事情:
# 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_means
。
有没有更有效的方法?
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)