所以,假设我有一个如下两级的熊猫DataFrame,在多索引中,簇为0级,子簇为1级:
<body onload="init()">
我想做的是创建一个由每个子集群的平均值组成的DataFrame。请注意,由于数据集的命名方式,某些子群集的名称相同(例如,群集1和2各自具有两个不同的子群集,如上所示。我的实际数据集更大,有15个不同的群集,最大29个子集群,总计约40,000列。
使用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
不起作用,因为它无法区分集群1子集群1和集群2子集群1,例如,我想这样做。换句话说,它将创建一个仅具有3列的Mean的DataFrame,每个子集群对应一列,而我想对其进行限制以找到其集群中每个子集群的均值。据我所知,使用df.groupby(level=1, axis=1).mean()
可以完成这项工作,但这意味着我必须对15个群集中的每个群集都进行此操作,然后将所有群集连接起来以最终到达我想要的位置。
我的问题是,是否有一种更快,更优雅的方法。同样,最好是一种保留有关起源集群的信息的方式。我的操作方式没有显示主群集,这意味着我必须在串联之前将其手动添加到每个DataFrame中。
我希望我的问题清楚。
答案 0 :(得分:1)
使用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