为了账号安全,请及时绑定邮箱和手机立即绑定

列到行中的熊猫?

列到行中的熊猫?

烙印99 2021-11-23 20:06:28
我有以下数据框:Index Uniprot    ID1   ID2      P1       P2      1     O00141     2r5tA 3hdmA    2r5tA_1  3hdmA_92     O00141     2r5tA 3hdmA    2r5tA_2  3hdmA_13     O00141     2r5tA 3hdmA    2r5tA_7  3hdmA_74     O15021     2w7rB 2w7rA    2w7rB_2  2w7rA_2并希望输出像这样:O00141 2r5tA 2r5tA_1 2r5tA_2 2r5tA_7O00141 3hdmA 3hdmA_9 3hdmA_1 3hdmA_7              O15021 2w7rB 2w7rB_2O15021 2w7rA 2w7rA_2我在 pandas.T 中使用了转置并得到了一些类似的输出,但只有线性行:Uniprot  O00141   O00141   O00141   O15021ID1      2r5tA    2r5tA    2r5tA    2w7rBID2      3hdmA    3hdmA    3hdmA    2w7rAP1       2r5tA_1  2r5tA_2  2r5tA_7  2w7rB_2P2       3hdmA_9  3hdmA_1  3hdmA_7  2w7rA_2
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

需要迭代每一行,但并不复杂,想法是用想要的数据创建一个 dict 并使用DataFrame.from_dict


data="""

Index Uniprot   P1       P2       ID1     ID2   

1     O00141    2r5tA_1  3hdmA_9  2r5tA 3hdmA

2     O00141    2r5tA_2  3hdmA_1  2r5tA 3hdmA

3     O00141    2r5tA_7  3hdmA_7  2r5tA 3hdmA

4     O15021    2w7rB_2  2w7rA_2  2w7rB 2w7rA

"""

#create the sample dataframe

df = 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        4

0  O00141  2r5tA  2r5tA_1  2r5tA_2  2r5tA_7

1  O00141  3hdmA  3hdmA_9  3hdmA_1  3hdmA_7

2  O15021  2w7rB  2w7rB_2                  

3  O15021  2w7rA  2w7rA_2 


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信