我有以下数据框:
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
我想要做的是基于T1
和T2
的群组(基本上是第二列以后的所有列)。请注意,列名称不遵循任何模式,可以是两个以上。
我希望得到的最终结果是:
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
答案 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