繁体   English   中英

如何创建具有相同名称的pandas DataFrame多列索引的内部级别平均值的DataFrame?

[英]How to create a DataFrame of the mean of an inner level of a pandas DataFrame multi-column index with identical names?

因此,假设我有一个如下两级的熊猫DataFrame,在多索引中,簇为0级,子簇为1级:

Cluster        1         2         3
subcluster  1  1  2   1  2  2   1   2   3

A           11 12 13  13 20 21  16 127 18
B           14 15 16  14 19 22  16 027 19
C           17 18 19  15 18 23  16 71  12
D           20 21 22  16 17 24  16 71  30

我想做的是创建一个由每个子集群的平均值组成的DataFrame。 请注意,由于数据集的命名方式,某些子群集的名称相同(例如,群集1和2各自具有两个不同的子群集,如上所示。我的实际数据集更大,有15个不同的群集,最大29个子集群,总计约40 000列。

使用df.groupby(level=1, axis=1).mean()不起作用,因为它无法区分集群1子集群1和集群2子集群1,例如,我想这样做。 换句话说,它将创建一个仅具有3列的Mean的DataFrame,每个子集群对应一列,而我想对其进行限制以找到其集群中每个子集群的均值。 据我所知,使用df[1].groupby(level=0, axis=1).mean()完成此工作,但这意味着我必须对15个集群中的每个集群进行处理,然后将所有他们最终到我想要的地方。

我的问题是,是否有一种更快,更优雅的方法。 同样,最好是一种保留有关起源集群的信息的方式。 我的操作方式没有显示主群集,这意味着我必须在串联之前将其手动添加到每个DataFrame中。

希望我的问题清楚。

mean与两个级别一起使用:

df1 = df.mean(axis=1, level=[0,1])

就像这样:

df1 = df.groupby(level=[0,1], axis=1).mean()

print (df1)
Cluster     1           2           3             
            1     2     1     2     1      2     3
A        11.5  13.0  13.0  20.5  16.0  127.0  18.0
B        14.5  16.0  14.0  20.5  16.0   27.0  19.0
C        17.5  19.0  15.0  20.5  16.0   71.0  12.0
D        20.5  22.0  16.0  20.5  16.0   71.0  30.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM