[英]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.