当我使用pandas groupby按组对值求和并在另一个groupby中使用结果来计算每个子组内组总数的百分比时,我无法重置索引以通过切片访问列。如何访问列或重置索引?
test = pd.DataFrame({'Animal' : ['Falcon', 'Falcon','Parrot', 'Parrot','Mouse','Mouse'],'Type':['Bird', 'Bird', 'Bird', 'Bird', 'Rodent','Rodent'],'Count' : [380., 370., 24., 26., 1.9, 2.8]})
# second groupby gives a proportion of total animal counts within each type
gb = test.groupby(['Type','Animal']).sum().groupby(level=0).apply(lambda x: x / float(x.sum()))
当我拆栈时,我无法重置索引,以便可以提取列
gb = gb.unstack().reset_index()
gb.loc['Animal']
导致错误,表明没有名为“动物”的列。
如何在堆积后重新设置,以便可以对列进行子集化(或重命名它们,这现在可以替代)?
答案 0 :(得分:1)
当我拆栈时,我无法重置索引,以便可以提取列
gb.unstack() gb.loc['Animal']
您可以通过以下方式获得“动物”栏:
gb.loc[:,'Animal']
要么
gb['Animal']
答案 1 :(得分:0)
您要计算什么?
我认为第二个groupby
操作不合适:
gb = test.groupby('Animal').sum().groupby(level=0).apply(lambda x: x / float(x.sum()))
尝试一下:
gb = test.groupby("Animal").sum().apply(lambda x: x / float(x.sum())).reset_index()
答案 2 :(得分:0)
您误读了该错误。错误是在索引而不是列中找不到“动物”。由于.loc的工作方式而引起的混乱。如果仅一项传递给.loc,则它将被解释为索引。仅第二项用于列。因此,您可以使用:
gb.loc[:, 'Animal']
但是您也可以简单地做到:
gb['Animal']