簡體   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