如何匹配双DataFrame条件并提取值填充至Result列
解决方案
你的代码问题点
- 仅检查了
df2第一行的number值(df2.loc[0, 'number']),未匹配所有行的number - 逻辑中未正确提取
df2里对应ID列与匹配number行的目标值 - 使用
iterrows()效率偏低,pandas提供了更简洁的向量化操作方案
方法一:重塑df2结构后合并(推荐,高效)
先把df2转为"长格式",让ID作为独立列,便于和df1直接匹配:
import pandas as pd # 初始化示例数据 df1 = pd.DataFrame({ 'ID': [13256, 15556, 14556], 'number': [99, 100, 100], 'Result': [pd.NA, pd.NA, pd.NA] }) df2 = pd.DataFrame({ 13256: [12,10,11], 15556: [1,2,3], 14556: [4,5,6], 'number': [99,100,101] }) # 重塑df2:将原ID列转为行数据 df2_melted = df2.melt(id_vars='number', var_name='ID', value_name='Result') # 合并两个DataFrame,保留df1原始结构 df1 = df1.merge(df2_melted, on=['ID', 'number'], how='left') print(df1)
运行结果:
ID number Result 0 13256 99 12 1 15556 100 2 2 14556 100 5
方法二:apply逐行匹配(适合小数据集)
如果不想修改df2结构,可通过apply逐行处理df1:
def fill_result(row): # 筛选df2中number匹配的行 match_row = df2[df2['number'] == row['number']] if not match_row.empty and row['ID'] in df2.columns: return match_row[row['ID']].values[0] return pd.NA df1['Result'] = df1.apply(fill_result, axis=1) print(df1)
该方法会针对df1每一行,先找到df2中number相等的行,再提取对应ID列的值。
内容的提问来源于stack exchange,提问作者complog
相关产品推荐
相关产品推荐

