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