如何基于列将数据帧拆分为多个数据帧

时间:2015-03-30 03:18:05

标签: python pandas

我有以下数据框:

import pandas as pd
df = pd.DataFrame( { 
    "Name" : ["gene1","gene2","gene3","gene4"] , 
    "T1" : [0.33,1,3,4],
    "T2" : [1.23,2.1,3.5,5.0], } )

看起来像这样:

In [30]: df
Out[30]:
    Name    T1    T2
0  gene1  0.33  1.23
1  gene2  1.00  2.10
2  gene3  3.00  3.50
3  gene4  4.00  5.00

我想要做的是基于T1T2的群组(基本上是第二列以后的所有列)。请注意,列名称不遵循任何模式,可以是两个以上。

我希望得到的最终结果是:

T1
    Name    T1   
0  gene1  0.33  
1  gene2  1.00  
2  gene3  3.00  
3  gene4  4.00 

T2
    Name    T2
0  gene1    1.23
1  gene2    2.10
2  gene3    3.50
3  gene4    5.00

我怎样才能做到这一点?

我尝试了这个,但没有给出我想要的东西:

tlist = list(df.columns[1:])
for dft in df.groupby(tlist,axis=1):
    print df

1 个答案:

答案 0 :(得分:2)

您可以使用pd.melt()

到达目的地
melted = pd.melt(df, id_vars='Name', var_name='t_col')

for t_col, sub_df in melted.groupby('t_col'):
    print(sub_df)

    Name t_col  value
0  gene1    T1   0.33
1  gene2    T1   1.00
2  gene3    T1   3.00
3  gene4    T1   4.00
    Name t_col  value
4  gene1    T2   1.23
5  gene2    T2   2.10
6  gene3    T2   3.50
7  gene4    T2   5.00