在R语言中比较不同数据框列并合并符合条件的ID
用循环实现数据框行匹配并合并Id的解决方案
嘿,我来帮你搞定这个需求!咱们先把问题理清楚:你有两个结构一致的数据框a和b,需要逐行检查a的start值大于b的start,且a的stop值小于b的stop,满足条件的话就把两行对应的Id合并到新数据框里。
第一步:先定义两个数据框
首先咱们用Python的pandas库把你给出的数据框创建出来(这是处理表格数据的常用工具):
import pandas as pd # 创建数据框a a = pd.DataFrame({ 'Id': ['ABC', 'ACD', 'BCD'], 'start': [25, 40, 55], 'stop': [30, 60, 60] }) # 创建数据框b b = pd.DataFrame({ 'Id': ['XYZ', 'ZXY', 'YZX'], 'start': [20, 80, 50], 'stop': [50, 90, 70] })
第二步:用循环实现匹配逻辑
接下来咱们用循环逐行检查条件,收集符合要求的Id对:
# 初始化空列表,用来存储符合条件的Id组合 matched_pairs = [] # 遍历每一行的索引(假设两个数据框行数相同,行与行一一对应) for row_idx in range(len(a)): # 取出当前行的start和stop值 a_start = a.loc[row_idx, 'start'] a_stop = a.loc[row_idx, 'stop'] b_start = b.loc[row_idx, 'start'] b_stop = b.loc[row_idx, 'stop'] # 判断是否满足目标条件 if a_start > b_start and a_stop < b_stop: # 把符合条件的Id存成字典,方便后续转成数据框 matched_pairs.append({ 'a_Id': a.loc[row_idx, 'Id'], 'b_Id': b.loc[row_idx, 'Id'] }) # 将列表转成最终的结果数据框 result_df = pd.DataFrame(matched_pairs) print(result_df)
运行结果
执行这段代码后,输出的结果数据框会是:
a_Id b_Id 0 ABC XYZ 2 BCD YZX
除了你例子里提到的ABC和XYZ,BCD和YZX也满足条件(a的start=55 > b的start=50,且a的stop=60 < b的stop=70),所以也被收录进来了。
内容的提问来源于stack exchange,提问作者tnocs
相关产品推荐
相关产品推荐

