R语言按指定列外合并不等列dataframe并去重保留唯一行
实现方法
你要的操作是标准的按多字段全外连接,不需要额外手动去重:关联键(a、b、c三列)取值完全相同的行会在连接时自动合并,两个数据集的独有行都会被保留,仅在a2中存在的d列会自动给a1独有的行填充缺失值。
Python(pandas)版本
import pandas as pd import numpy as np # 替换成你自己的数据读取逻辑即可 a1 = pd.DataFrame({ 'a': [1,2,3,4,5], 'b': ['apple', 'bees', 'candy', 'dice', 'donut'], 'c': ['x', 'a', 'a', 's', 'd'] }) a2 = pd.DataFrame({ 'a': [1,2,6], 'b': ['apple', 'bees', 'coffee'], 'c': ['x', 'a', 'r'], 'd': ['a', 'd', 's'] }) a3 = pd.merge(a1, a2, on=['a', 'b', 'c'], how='outer') # 可选:将默认的NaN缺失值替换为NA,行号从1开始,匹配你给出的输出格式 a3 = a3.replace(np.nan, 'NA') a3.index = range(1, len(a3)+1)
打印a3输出如下,完全符合你的预期:
a b c d 1 1 apple x a 2 2 bees a d 3 3 candy a NA 4 4 dice s NA 5 5 donut d NA 6 6 coffee r s
R语言版本
用R内置的merge函数即可,不需要额外加载包:
# 替换成你自己的数据读取逻辑 a1 <- data.frame( a = c(1,2,3,4,5), b = c('apple','bees','candy','dice','donut'), c = c('x','a','a','s','d') ) a2 <- data.frame( a = c(1,2,6), b = c('apple','bees','coffee'), c = c('x','a','r'), d = c('a','d','s') ) a3 <- merge(a1, a2, by = c('a','b','c'), all = TRUE)
直接输出a3就是你要的结果,缺失值默认填充为NA,行号从1开始。
内容的提问来源于stack exchange,提问作者ltong
相关产品推荐
相关产品推荐

