簡體   English   中英

如何根據名稱對熊貓中的多列進行分組?

[英]How to groupby multiple columns in pandas based on name?

我想創建一個新的數據框,其列計算為從此數據框中具有相似名稱的列的平均值:

            B6_i     B6_ii    B6_iii  ...  BXD80_i   BXD80_ii   BXD81_i
data                                  ...                              
Cd38    0.598864 -0.225322  0.306926  ... -0.312190  0.281429  0.424752
Trim21  1.947399  2.920681  2.805861  ...  1.469634  2.103585  0.827487
Kpnb1  -0.458240 -0.417507 -0.441522  ... -0.314313 -0.153509 -0.095863
Six1    1.055255  0.868148  1.012298  ...  0.142565  0.264753  0.807692

新的數據框應如下所示:

               B6     BXD80  ...    BXD81
data                                 
Cd38    -0.041416 -0.087859  ...  0.424752
Trim21  15.958981  3.091500  ...  0.827487
Kpnb1   -0.084471  0.048250  ... -0.095863
Six1     0.927383  0.037745  ...  0.807692

(如 (B6_i + B6_ii + B6_iii)/3),基於直到下划線“_”的所有字符)

有些列是 n 列之一,而其他列是單數的(如“BXD81_i”),所以我需要一種方法,可以為每個平均計算使用不同的數字。

您可以按_之前的值匯總每列的mean

df.columns = df.columns.str.split('_', expand=True)

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

或者:

df1 = df.groupby(lambda x: x.split('_')[0], axis=1).mean()
print (df1)
              B6     BXD80     BXD81
data                                
Cd38    0.226823 -0.015381  0.424752
Trim21  2.557980  1.786609  0.827487
Kpnb1  -0.439090 -0.233911 -0.095863
Six1    0.978567  0.203659  0.807692

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM