Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在DataFrame中将标头拆分为多个标头_Python_Pandas_Dataframe - Fatal编程技术网

Python 在DataFrame中将标头拆分为多个标头

Python 在DataFrame中将标头拆分为多个标头,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,需要将标题拆分为多行,作为同一数据帧的标题 数据框看起来像这样 我的数据框如下所示 gene ALL_ID_1 AML_ID_1 AML_ID_2 AML_ID_3 AML_ID_4 AML_ID_5 Stroma_ID_1 Stroma_ID_2 Stroma_ID_3 Stroma_ID_4 Stroma_ID_5 Stroma_CR_Pat_4 Stroma_CR_Pat_5 Stroma_CR_Pat_6 Stroma_CR_Pa

我有一个数据帧,需要将标题拆分为多行,作为同一数据帧的标题

数据框看起来像这样

我的数据框如下所示

gene    ALL_ID_1    AML_ID_1    AML_ID_2    AML_ID_3    AML_ID_4    AML_ID_5    Stroma_ID_1 Stroma_ID_2 Stroma_ID_3 Stroma_ID_4 Stroma_ID_5 Stroma_CR_Pat_4 Stroma_CR_Pat_5 Stroma_CR_Pat_6 Stroma_CR_Pat_7 Stroma_CR_Pat_8
ENSG    8   1   11  5   10  0   628 542 767 578 462 680 513 968 415 623
ENSG    0   0   1   0   0   0   0   28  1   3   0   1   4   0   0   0
ENSG    661 1418    2580    6817    14727   5968    9   3   5   9   2   9   3   3   5   1
ENSG    20  315 212 8   790 471 1283    2042    1175    2839    1110    857 1880    1526    2262    2624
ENSG    11  26  24  9   11  2   649 532 953 463 468 878 587 245 722 484
我希望上面的标题是这样的

  network   ID  ID                               REL                
node    B_ALL   AML                 Stroma                                  
hemi    1   1   2   3   4   5   1   2   3   4   5   6   7   8   9   10
ENSG    8   1   11  5   10  0   628 542 767 578 462 680 513 968 415 623
ENSG    0   0   1   0   0   0   0   28  1   3   0   1   4   0   0   0
ENSG    661 1418    2580    6817    14727   5968    9   3   5   9   2   9   3   3   5   1
ENSG    20  315 212 8   790 471 1283    2042    1175    2839    1110    857 1880    1526    2262    2624
ENSG    11  26  24  9   11  2   649 532 953 463 468 878 587 245 722 484

非常感谢您提供的任何帮助。

可能不是您在这里给出的最好的最小示例,很少有人有专业知识来理解您上下文中的
网络
节点
半人

您只需创建
多索引
,并将列索引替换为您创建的索引:

在您的示例中有3条规则:

  • 1、无论何时发现“基质”,该列都属于
    REL
    ,否则属于
    ID
  • 2,
    节点
    是初始列名的第一个字段
  • 3,
    hemi
    是初始列名的最后一个字段
然后,只需编写代码:

In [110]:
df.columns = pd.MultiIndex.from_tuples(zip(np.where(df.columns.str.find('Stroma')!=-1, 'REL', 'ID'),
                                           df.columns.map(lambda x: x.split('_')[0]),
                                           df.columns.map(lambda x: x.split('_')[-1])), 
                                       names=['network', 'node', 'hemi'])

print df

network   ID                                   REL                          \
node     ALL   AML                          Stroma                           
hemi       1     1     2     3      4     5      1     2     3     4     5   
gene                                                                         
ENSG       8     1    11     5     10     0    628   542   767   578   462   
ENSG       0     0     1     0      0     0      0    28     1     3     0   
ENSG     661  1418  2580  6817  14727  5968      9     3     5     9     2   
ENSG      20   315   212     8    790   471   1283  2042  1175  2839  1110   
ENSG      11    26    24     9     11     2    649   532   953   463   468   

network                               
node                                  
hemi       4     5     6     7     8  
gene                                  
ENSG     680   513   968   415   623  
ENSG       1     4     0     0     0  
ENSG       9     3     3     5     1  
ENSG     857  1880  1526  2262  2624  
ENSG     878   587   245   722   484