You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何实现DataFrame与单行向量逐行配对合并

Pandas 两DataFrame按列匹配生成列表/字典单元格实现方案

首先准备测试数据,需提前导入pandas和numpy依赖:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({"A":[1,0,1,2,1],"B":[2,2,1,0,1],"C":[1,1,1,2,1],"D":[2,1,2,1,1]})
df2 = pd.DataFrame({"A":[1],"B":[2],"D":[4]})

核心预处理步骤:由于df2仅1行数据,先提取其第一行的列取值,对齐df1的全部列,df2中不存在的列自动填充np.nan:

weight_series = df2.iloc[0].reindex(df1.columns)

实现二元列表格式结果

逐列遍历,将df1列中每个值和对应列的匹配值打包为长度为2的列表即可:

res_list = pd.DataFrame()
for col in df1.columns:
    col_weight = weight_series[col]
    res_list[col] = df1[col].apply(lambda val: [val, col_weight])

执行后输出结果完全匹配预期:

A       B         C       D
0  [1, 1]  [2, 2]  [1, nan]  [2, 4]
1  [0, 1]  [2, 2]  [1, nan]  [1, 4]
2  [1, 1]  [1, 2]  [1, nan]  [2, 4]
3  [2, 1]  [0, 2]  [2, nan]  [1, 4]
4  [1, 1]  [1, 2]  [1, nan]  [1, 4]

实现字典格式结果(优选方案)

逻辑和列表格式一致,仅需将打包的二元结构替换为固定键的字典,Answer键存df1原值,Weight键存df2对应列的匹配值:

res_dict = pd.DataFrame()
for col in df1.columns:
    col_weight = weight_series[col]
    res_dict[col] = df1[col].apply(lambda val: {"Answer": val, "Weight": col_weight})

执行后输出结果完全匹配预期:

A                           B                              C                           D
0  {'Answer': 1, 'Weight': 1}  {'Answer': 2, 'Weight': 2}  {'Answer': 1, 'Weight': nan}  {'Answer': 2, 'Weight': 4}
1  {'Answer': 0, 'Weight': 1}  {'Answer': 2, 'Weight': 2}  {'Answer': 1, 'Weight': nan}  {'Answer': 1, 'Weight': 4}
2  {'Answer': 1, 'Weight': 1}  {'Answer': 1, 'Weight': 2}  {'Answer': 1, 'Weight': nan}  {'Answer': 2, 'Weight': 4}
3  {'Answer': 2, 'Weight': 1}  {'Answer': 0, 'Weight': 2}  {'Answer': 2, 'Weight': nan}  {'Answer': 1, 'Weight': 4}
4  {'Answer': 1, 'Weight': 1}  {'Answer': 1, 'Weight': 2}  {'Answer': 1, 'Weight': nan}  {'Answer': 1, 'Weight': 4}

注:如果后续df2存在多行需要按行索引配对,仅需调整weight_series的生成逻辑为按行广播即可,当前单值匹配场景下上述写法执行效率最高,无需使用复杂的merge或张量广播操作。

内容的提问来源于stack exchange,提问作者Luiz Adauto Sanches Ribeiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:24:11