基于指定匹配规则合并两个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
相关产品推荐
相关产品推荐

