Python 如何使用Pandas index.insert?

Python 如何使用Pandas index.insert?,python,pandas,Python,Pandas,我有一张像这样的桌子 Class1 Class2 Boy Tall 5 3 Short 2 4 Girl Tall 3 3 Short 3 4 为此,我想添加一行,如下所示。(不使用透视表“边距”) 我认为这样做的一种方法是在当前第一个索引(男孩和女孩)之前插入一个虚拟索引(Students),并执行一个groupby(level=

我有一张像这样的桌子

               Class1   Class2
Boy    Tall     5         3
       Short    2         4
Girl   Tall     3         3
       Short    3         4
为此,我想添加一行,如下所示。(不使用透视表“边距”)

我认为这样做的一种方法是在当前第一个索引(男孩和女孩)之前插入一个虚拟索引(Students),并执行一个groupby(level=0)来计算列总数,然后在使用原始数据帧连接新的子行之前删除虚拟索引

                         Class1   Class2
Students  Boy    Tall     5         3
                 Short    2         4
          Girl   Tall     3         3
                 Short    3         4
          Total           13        14
我要写的代码是这样的,但它会导致index.insert语句出现“unhabable type”错误。另一件我需要帮助的事情是删除虚拟索引的方法。我在文档中没有看到类似index.remove的内容

df2 = df
df2.index.insert(0,'Students')   ##  Apparently 'Students' results in 'unhashable type' error
df2 = df2.groupby(level = 0, sort = False).sum()
df2.index.remove(0)            ## This is what I made up...Couldn't find how to remove a particular index from multiindex
pd.concat(df, df2)
文档说明如下,但我找不到一个可接受的“项目”的好例子


您可以使用
margins=True
,只需将除最后一列之外的所有列进行子集,如下所示:

pd.pivot_table(data, index = ['gender','height'], 
                   columns = ['class'], margins=True).iloc[:,:-1]

为什么不使用
margins=True
?我的部分要求是不显示行总数。似乎无法使用pivot_表边距仅选择两种方法中的一种(即行或列合计)。能否在pivot之前发布数据帧,以便我们可以重新创建数据帧?
.ix
方法自pandas 0.20.0以来已被弃用。改用
df.loc[('Total',''):]=df.sum()
pandas.Index.insert

Index.insert(loc, item)
  Make new Index inserting new item at location. Follows Python list.append semantics for negative values
pd.pivot_table(data, index = ['gender','height'], 
                   columns = ['class'], margins=True).iloc[:,:-1]
df = pd.DataFrame({'gender': ['Boy', 'Boy', 'Girl', 'Girl'], 
                   'height': ['Tall', 'Short'] * 2, 
                   'Class1': [5, 2, 3, 3], 
                   'Class2': [3, 4, 3, 4]}).set_index(['gender', 'height'])

df.ix[('Total', ''), :] = df.sum()

>>> df
               Class1  Class2
gender height                
Boy    Tall       5.0     3.0
       Short      2.0     4.0
Girl   Tall       3.0     3.0
       Short      3.0     4.0
Total            13.0    14.0