在数据框上使用“ groupby”功能后,我有了一个具有多级列层次结构的新数据框。顶层(例如index = 0)列之一被称为“总计”,其下有可变数量的第二层列(index = 1)。我已经找到了使用指定每个列名称的索引一次删除一个或多个第二级列的解决方案,但是根据我的数据源,我的脚本将在顶层下生成大量和可变数量的列。我只想指向名为“总计”的顶层列,并删除层次结构中属于它的所有列,而不必知道第二层列的潜在名称。
我已经尝试过删除单个列,但是找不到任何允许我删除所有列的在线内容。大多数示例都指定您必须指向要删除的列的索引,但是我的代码可以根据数据源生成许多第二级列(例如,可能不预先知道第二列的数目和名称)。 / p>
删除第二级(index = 1)列的示例:
df.drop('c', axis=1, level=1)
我找不到摆脱第二列为一组的代码示例。
我的数据框看起来像这样,我想将所有列都放在“总计”下。该代码生成的列数可能很大,因此无法事先知道它们的名称和名称。它
Total Total perCent perCent
Antibiotic AMPICI BENZYL AMPICI BENZYL
Organism
Enterococcus avium 1 1 0.0 (0/1) 0.0 (0/1)
Enterococcus cassel 1 1 100.0 (1/1) 100.0 (1/1)
Enterococcus faecalis 46 45 95.7 (44/46) 95.6 (43/45)
Enterococcus faecalis 2 2 100.0 (2/2) 100.0 (2/2)
答案 0 :(得分:0)
如果我对您的理解正确,那么您正在寻找DataFrame.droplevel()
(https://pandas-docs.github.io/pandas-docs-travis/reference/api/pandas.DataFrame.droplevel.html):
df.droplevel(level=1, axis=1)
但是,这将导致重复的列名,这可能是不希望的。相反,您可能想使用两个级别的值来展平MultiIndex列:
df.columns = ['_'.join(col) for col in df.columns.values]
答案 1 :(得分:0)
一种可能的方法是将MultiIndex转换为纯数据帧并标识要保留的列的数字位置。然后很容易删除不需要的列:
Parent
使用您的样本数据,它应该给出:
ix = pd.DataFrame(index=df.columns).reset_index()
result = df.iloc[:, ix[ix['level_0']!='Total'].index]