使用pandas,如何按两列计算值

2024-09-27 00:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,有三列,蛋白质a,蛋白质B,相互作用。 see it here

我想通过对蛋白质A和蛋白质B进行分组来找出所有的相互作用,并且,当对蛋白质A和蛋白质B进行分组时,顺序并不重要

    Protein_A   Interaction      Protein_B
0   A1BG        ER               A2M
1   A1BG        MI               ABCC6
2   ABCC6       AS               A1BG
3   A1BG        MI               ADAM10
4   A1BG        MI               ADAM17

结果如下所示:

{AB1G, A2M}     -> ER
{AB1G, ABCC6}   -> MI, AS
{A1BG, ADAM10}  -> MI
{A1BG, ADAM17}  -> MI 

Tags: 数据hereasit蛋白质miersee
1条回答
网友
1楼 · 发布于 2024-09-27 00:22:44

我同意您希望对行进行分组,但预期结果显示 而不是值计数对于实际需要列表的每个组 交互代码。你知道吗

要创建这样一个列表(针对每个组),请按以下步骤操作:

从定义一个计算分组键的函数开始 -蛋白质代码(a和B)的排序列表,转换为字符串:

def protSorted(key):
    row = df.loc[key]
    return ', '.join(sorted([row.Protein_A, row.Protein_B]))

然后用这个函数对源数据帧进行分组,取交互 列并创建交互代码列表:

df.groupby(protSorted).Interaction.apply(list)

对于示例数据,结果是一个系列,如下所示:

A1BG, A2M           [ER]
A1BG, ABCC6     [MI, AS]
A1BG, ADAM10        [MI]
A1BG, ADAM17        [MI]
Name: Interaction, dtype: object

或者,如果您希望每组都有一个字符串(不带括号), 改为运行:

df.groupby(protSorted).Interaction.apply(', '.join)

这次的结果是:

A1BG, A2M           ER
A1BG, ABCC6     MI, AS
A1BG, ADAM10        MI
A1BG, ADAM17        MI
Name: Interaction, dtype: object

相关问题 更多 >

    热门问题