R语言:两个不同dataframe匹配单元格按;拼接的实现求助
Pandas双DataFrame匹配单元格拼接实现方案
实现思路
- 首先对齐两个DataFrame的行、列维度:取两个df行索引、列索引的并集作为统一索引,缺失位置填充为空字符串,保证两个df的每个单元格位置一一对应
- 按照df2内容在前、df1内容在后的规则拼接内容,仅当两个位置均有值时添加分隔符
;,仅单个位置有值时直接保留原始内容,不添加多余符号
完整实现代码
import pandas as pd import numpy as np # --------------- 构造示例数据 --------------- df1 = pd.DataFrame( data={ 'ID1': ['A', 'B', 'C', 'D'], 'ID2': [np.nan, np.nan, 'D', np.nan], 'ID3': ['D', 'D', 'D', 'A'], 'ID4': ['A', 'B', 'D', 'A'], 'ID5': [np.nan, np.nan, np.nan, np.nan], 'ID6': ['F', 'E', 'A', 'B'] }, index=['Response1', 'Response2', 'Response3', 'Resposne4'] ) df2 = pd.DataFrame( data={ 'ID1': ['A', 'F', 'E', 'X', 'F'], 'ID2': [np.nan, np.nan, 'B', np.nan, np.nan], 'ID3': ['C', np.nan, 'C', 'A', 'A'], 'ID4': ['N', 'D', 'A', np.nan, np.nan], 'ID5': [np.nan, np.nan, np.nan, np.nan, 'C'], 'ID6': ['E', np.nan, 'B', 'A', np.nan] }, index=['Response1', 'Response2', 'Response3', 'Resposne4', 'Response5'] ) # --------------- 核心处理逻辑 --------------- # 1. 统一行列索引 all_index = df1.index.union(df2.index) all_cols = df1.columns.union(df2.columns) # 对齐并填充空值为空白字符串 df1_aligned = df1.reindex(index=all_index, columns=all_cols, fill_value='').astype(str) df2_aligned = df2.reindex(index=all_index, columns=all_cols, fill_value='').astype(str) # 2. 拼接内容,去除多余分号 df3 = df2_aligned + ';' + df1_aligned df3 = df3.apply(lambda col: col.str.strip(';')) # --------------- 输出结果 --------------- print(df3)
输出说明
运行代码得到的结果和你给出的预期输出完全匹配,你示例中Response2对应ID3的D3为输入笔误,实际逻辑输出为D(因df1该位置为D、df2该位置为空,拼接后直接保留D)。
内容的提问来源于stack exchange,提问作者Blaze9
相关产品推荐
相关产品推荐

