You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中合并重复DataFrame行:仅合并PubMed不同的重复行

合并DataFrame中重复行(仅PubMed列不同)

没问题,这就帮你实现需求!你需要合并DataFrame中仅PubMed ID不同、其余列完全一致的行,把多个PubMed ID用逗号拼接在同一行里。下面是具体的实现步骤和代码:

步骤1:导入依赖并创建原始DataFrame

首先我们导入pandas,然后定义你提供的原始数据并生成DataFrame:

import pandas as pd

# 原始输入数据
data_dict = {
    'FromTo_U': {0: 'L->R', 1: 'L->R', 2: 'S->I'},
    'GeneName': {0: 'EGFR', 1: 'EGFR', 2: 'EGFR'},
    'MutationAA_C': {0: 'p.L858R', 1: 'p.L858R', 2: 'p.S768I'},
    'MutationDescription': {0: 'Substitution - Missense', 1: 'Substitution - Missense', 2: 'Substitution - Missense'},
    'PubMed': {0: '22523351', 1: '23915069', 2: '26862733'},
    'VariantID': {0: 'COSM12979', 1: 'COSM12979', 2: 'COSM18486'},
    'VariantPos_U': {0: '858', 1: '858', 2: '768'},
    'VariantSource': {0: 'COSMIC', 1: 'COSMIC', 2: 'COSMIC'}
}
df1 = pd.DataFrame(data_dict)

步骤2:执行合并操作

核心逻辑是按除PubMed外的所有列分组,然后将同一组内的PubMed ID用逗号拼接:

# 分组聚合:除PubMed外的列作为分组键,拼接PubMed列
df_merged = df1.groupby(
    [col for col in df1.columns if col != 'PubMed'],
    as_index=False
)['PubMed'].agg(','.join)

代码解释:

  • [col for col in df1.columns if col != 'PubMed']:动态获取除PubMed外的所有列作为分组依据,确保只有当这些列的内容完全相同时才会被合并。
  • agg(','.join):对每个分组中的PubMed列执行拼接操作,用逗号分隔不同的ID。
  • as_index=False:避免将分组列转为索引,保持和原始DataFrame一致的列结构。

步骤3:查看合并结果

打印df_merged就能得到你期望的输出:

FromTo_U GeneName MutationAA_C       MutationDescription               PubMed   VariantID VariantPos_U VariantSource
0     L->R     EGFR     p.L858R  Substitution - Missense  22523351,23915069  COSM12979          858        COSMIC
1     S->I     EGFR     p.S768I  Substitution - Missense           26862733  COSM18486          768        COSMIC

这个结果完全符合你的要求:仅合并了前两行(除PubMed外所有列相同),并将两个PubMed ID拼接在一起,第三行保持不变。

内容的提问来源于stack exchange,提问作者user2277675

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:48:15