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

时间:2019-03-02 17:24:44

标签: python pandas dataframe

所以,假设我有一个如下两级的熊猫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中。

我希望我的问题清楚。

1 个答案:

答案 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