列到行中的熊猫?

我有以下数据框:


Index Uniprot    ID1   ID2      P1       P2      

1     O00141     2r5tA 3hdmA    2r5tA_1  3hdmA_9

2     O00141     2r5tA 3hdmA    2r5tA_2  3hdmA_1

3     O00141     2r5tA 3hdmA    2r5tA_7  3hdmA_7

4     O15021     2w7rB 2w7rA    2w7rB_2  2w7rA_2

并希望输出像这样:


O00141 2r5tA 2r5tA_1 2r5tA_2 2r5tA_7

O00141 3hdmA 3hdmA_9 3hdmA_1 3hdmA_7              

O15021 2w7rB 2w7rB_2

O15021 2w7rA 2w7rA_2

我在 pandas.T 中使用了转置并得到了一些类似的输出,但只有线性行:


Uniprot  O00141   O00141   O00141   O15021

ID1      2r5tA    2r5tA    2r5tA    2w7rB

ID2      3hdmA    3hdmA    3hdmA    2w7rA

P1       2r5tA_1  2r5tA_2  2r5tA_7  2w7rB_2

P2       3hdmA_9  3hdmA_1  3hdmA_7  2w7rA_2


烙印99
浏览 163回答 1
1回答

慕姐4208626

需要迭代每一行,但并不复杂,想法是用想要的数据创建一个 dict 并使用DataFrame.from_dictdata="""Index Uniprot   P1       P2       ID1     ID2   1     O00141    2r5tA_1  3hdmA_9  2r5tA 3hdmA2     O00141    2r5tA_2  3hdmA_1  2r5tA 3hdmA3     O00141    2r5tA_7  3hdmA_7  2r5tA 3hdmA4     O15021    2w7rB_2  2w7rA_2  2w7rB 2w7rA"""#create the sample dataframedf = pd.read_csv(pd.compat.StringIO(data), sep='\s+')#Uniprot have to be sorted df = df.sort_values(by= 'Uniprot')dico = {}for i, row in df.iterrows():    key1 = row.Uniprot + 'C1';key2 = row.Uniprot + 'C2'    if key1 not in dico:        dico[key1] = [row.Uniprot, row.ID1, row.P1]        dico[key2] = [row.Uniprot, row.ID2, row.P2]    else:        dico[key1] = dico[key1] + [row.P1]        dico[key2] = dico[key2] + [row.P2]maxlen = max ([len(l) for l in dico.values()])for k in dico.keys():    d = len(dico[k])    dico[k] = dico[k] + [''] * (maxlen - len(dico[k]))df_result = pd.DataFrame.from_dict(dico).T.reset_index(drop=True)print(df_result)输出:        0      1        2        3        40  O00141  2r5tA  2r5tA_1  2r5tA_2  2r5tA_71  O00141  3hdmA  3hdmA_9  3hdmA_1  3hdmA_72  O15021  2w7rB  2w7rB_2                  3  O15021  2w7rA  2w7rA_2 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python