Python(Pandas)在每个lvl的多索引数据帧上添加小计

Python(Pandas)在每个lvl的多索引数据帧上添加小计,第1张

概述假设我有以下数据帧: a b c Sce1 Sce2 Sce3 Sce4 Sce5 Sc6Animal Ground Dog 0.0 0.9 0.5 0.0 0.3 0.4 Animal Ground Cat 0.6 0.5 0.3 0.5 假设我有以下数据帧:

a       b       c      Sce1     Sce2    Sce3    Sce4    Sce5    Sc6Animal  Ground  Dog    0.0      0.9     0.5     0.0     0.3     0.4  Animal  Ground  Cat    0.6      0.5     0.3     0.5     1.0     0.2 Animal  Air     Eagle  1.0      0.1     0.1     0.6     0.9     0.1 Animal  Air     Owl    0.3      0.1     0.5     0.3     0.5     0.9     Object  Metal   Car    0.3      0.3     0.8     0.6     0.5     0.6 Object  Metal   Bike   0.5      0.1     0.4     0.7     0.4     0.2 Object  Wood    Chair  0.9      0.6     0.1     0.9     0.2     0.8 Object  Wood    table  0.9      0.6     0.6     0.1     0.9     0.7

我想创建一个MultiIndex,它将包含每个lvl的总和.输出将如下所示:

a      b      c     Sce1    Sce2    Sce3    Sce4    Sce5    Sce6Animal              1.9     1.6     1.4     1.3     2.7     1.6        Ground       0.6     1.4     0.8     0.5     1.3     0.6               Dog   0.0     0.9     0.5     0.0     0.3     0.4               Cat   0.6     0.5     0.3     0.5     1.0     0.2        Air          1.3     0.2     0.7     0.8     1.4     1.0               Eagle 1.0     0.1     0.1     0.6     0.9     0.1               Owl   0.3     0.1     0.5     0.3     0.5     0.9 Object              2.6     1.6     1.8     2.3     2.0     2.3        Metal        0.8     0.3     1.1     1.3     0.9     0.8               Car   0.3     0.3     0.8     0.6     0.5     0.6               Bike  0.5     0.1     0.4     0.7     0.4     0.2        Wood         1.8     1.3     0.6     1.0     1.1     1.5               Chair 0.9     0.6     0.1     0.9     0.2     0.8               table 0.9     0.6     0.6     0.1     0.9     0.7

目前我正在使用循环在每个级别创建三个不同的数据框,然后在excel上 *** 作它们,如下所示.所以如果可能的话我想在python中进行这个计算.

for i in range range(0,3):    df = df.groupby(List(df.columns)[0:lvl],as_index=False).sum()    return df

提前谢谢了.

解决方法 随着一些自由使用MAGIC

pd.concat([        df.assign(            **{x: 'Total' for x in 'abc'[i:]}        ).groupby(List('abc')).sum() for i in range(4)    ]).sort_index()                     Sce1  Sce2  Sce3  Sce4  Sce5  Sc6a      b      c                                       Animal Air    Eagle   1.0   0.1   0.1   0.6   0.9  0.1              Owl     0.3   0.1   0.5   0.3   0.5  0.9              Total   1.3   0.2   0.6   0.9   1.4  1.0       Ground Cat     0.6   0.5   0.3   0.5   1.0  0.2              Dog     0.0   0.9   0.5   0.0   0.3  0.4              Total   0.6   1.4   0.8   0.5   1.3  0.6       Total  Total   1.9   1.6   1.4   1.4   2.7  1.6Object Metal  Bike    0.5   0.1   0.4   0.7   0.4  0.2              Car     0.3   0.3   0.8   0.6   0.5  0.6              Total   0.8   0.4   1.2   1.3   0.9  0.8       Total  Total   2.6   1.6   1.9   2.3   2.0  2.3       Wood   Chair   0.9   0.6   0.1   0.9   0.2  0.8              table   0.9   0.6   0.6   0.1   0.9  0.7              Total   1.8   1.2   0.7   1.0   1.1  1.5Total  Total  Total   4.5   3.2   3.3   3.7   4.7  3.9

我可以得到你所要求的

pd.concat([        df.assign(            **{x: '' for x in 'abc'[i:]}        ).groupby(List('abc')).sum() for i in range(1,4)    ]).sort_index()                     Sce1  Sce2  Sce3  Sce4  Sce5  Sc6a      b      c                                       Animal                1.9   1.6   1.4   1.4   2.7  1.6       Air            1.3   0.2   0.6   0.9   1.4  1.0              Eagle   1.0   0.1   0.1   0.6   0.9  0.1              Owl     0.3   0.1   0.5   0.3   0.5  0.9       Ground         0.6   1.4   0.8   0.5   1.3  0.6              Cat     0.6   0.5   0.3   0.5   1.0  0.2              Dog     0.0   0.9   0.5   0.0   0.3  0.4Object                2.6   1.6   1.9   2.3   2.0  2.3       Metal          0.8   0.4   1.2   1.3   0.9  0.8              Bike    0.5   0.1   0.4   0.7   0.4  0.2              Car     0.3   0.3   0.8   0.6   0.5  0.6       Wood           1.8   1.2   0.7   1.0   1.1  1.5              Chair   0.9   0.6   0.1   0.9   0.2  0.8              table   0.9   0.6   0.6   0.1   0.9  0.7

至于如何!我将把它作为读者的练习.

总结

以上是内存溢出为你收集整理的Python(Pandas)在每个lvl的多索引数据帧上添加小计全部内容,希望文章能够帮你解决Python(Pandas)在每个lvl的多索引数据帧上添加小计所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存