python - 仅当两个值匹配且属于同一 ID 时才合并两个数据帧

标签 python pandas dataframe

我有一个关于合并 pandas 数据框的问题。我有两个数据框,如下所示:

df1:

chain   cdr3    raw_clonotype_id
TRB CASSARGASGERTDTQYF  clonotype1
TRA CAVSVVRNNNARLMF clonotype1
TRA CAVRGNARLMF clonotype4
TRB CASSLYGTGGSGANVLTF  clonotype4

df2:

cdr3    chain
CAVSVVRNNNARLMF TRA
CAVRGNARLMF TRA
CASSLYGTGGSGANVLTF  TRB

我想将它们合并到 cdr3 上,但只保留两条链(TRB 和 TRA)的克隆型 ID 匹配的行。

要得到这样的结果:

chain   cdr3    raw_clonotype_id
TRA CAVRGNARLMF clonotype4
TRB CASSLYGTGGSGANVLTF  clonotype4

我尝试过这个:

df3 = df.merge(df2.groupby('cdr3',as_index=False)[['cdr3']].agg(','.join),how='left')

但是输出是:

cdr3    chain
CAVSVVRNNNARLMF TRA
CAVRGNARLMF TRA
CASSLYGTGGSGANVLTF  TRB

我想我只需要在上面的行中添加一些内容,但我不知道是什么。

最佳答案

IIUC,可以先合并,再过滤,这里使用GroupBy.transform('nunique')确保每个克隆型有 2 个唯一值(2 个受体):

df3 = df1.merge(df2, on=['cdr3', 'chain'])
df3 = df3[df3.groupby('raw_clonotype_id')['chain'].transform('nunique').eq(2)]

输出:

  chain                cdr3 raw_clonotype_id
1   TRA         CAVRGNARLMF       clonotype4
2   TRB  CASSLYGTGGSGANVLTF       clonotype4

关于python - 仅当两个值匹配且属于同一 ID 时才合并两个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72290217/

相关文章:

python - 将字典转换为 Pandas 数据框

python - 系统地遍历 DF 的多列和多行,以跨多列输出不同的列表大小

python - 跨 Pandas DataFrame 中多列的映射方法

python - Pymacs lisp 版本的稀有之处

Python/Numpy 每第 n 行切片一个数组

python - Python itertools.islice 的源代码在哪里?

python - 匹配 Pandas 中的元组和数据处理

python - Pandas 仅将 1 个表导出到 Excel 但打印所有

python - 如何使用 pandas 数据框计算每个单元格的百分比并用结果(%)替换该值?

数据帧中的 Rstudio : use . N