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

基于指定匹配规则合并两个Python pandas DataFrame行的实现求助

实现思路及代码

前置准备

先导入pandas库读取两个数据集:

import pandas as pd

# 替换为你本地的csv文件路径
df_a = pd.read_csv('dataset_a.csv')
df_b = pd.read_csv('dataset_b.csv')

方法1:逐行遍历(逻辑直观,适合新手理解、小数据量场景)

完全匹配你描述的遍历逻辑,逐行查符合条件的匹配项:

# 先初始化要合并的三个新列
df_a['Parameter B'] = None
df_a['Parameter C'] = None
df_a['Parameter D'] = None

# 遍历数据集A的每一行
for idx, row in df_a.iterrows():
    p1_val = row['Parameter 1']
    p2_val = row['Parameter 2']
    # 从数据集B中筛选符合两个匹配条件的行
    match_res = df_b[(df_b['Parameter A'] == p1_val) & (df_b['Parameter B'] < p2_val) & (p2_val <= df_b['Parameter C'])]
    # 匹配成功则赋值
    if not match_res.empty:
        df_a.at[idx, 'Parameter B'] = match_res.iloc[0]['Parameter B']
        df_a.at[idx, 'Parameter C'] = match_res.iloc[0]['Parameter C']
        df_a.at[idx, 'Parameter D'] = match_res.iloc[0]['Parameter D']

# 重命名列+空值替换为'-',符合你要的输出格式
df_a = df_a.rename(columns={'Parameter 1': 'Parameter 1/A'}).fillna('-')
print(df_a)

方法2:矢量化操作(性能更高,适合10万行以上的大数据量场景)

用pandas原生的合并过滤逻辑,避免循环,运行效率高10~100倍:

# 先按Parameter 1=Parameter A的规则合并两个表
temp = df_a.merge(df_b, left_on='Parameter 1', right_on='Parameter A', how='left')
# 过滤符合区间条件的匹配行
filter_res = temp[(temp['Parameter B'] < temp['Parameter 2']) & (temp['Parameter 2'] <= temp['Parameter C'])]
# 把匹配结果和原数据集A合并,保留A的所有行
result = df_a.merge(filter_res[['Parameter 1', 'Parameter B', 'Parameter C', 'Parameter D']], on='Parameter 1', how='left')
# 格式调整
result = result.rename(columns={'Parameter 1': 'Parameter 1/A'}).fillna('-')
print(result)

注意事项

如果出现一行A匹配到多行B的情况,上述代码默认取第一条匹配结果,你可以根据需求调整为取最大值/平均值等逻辑。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:03