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

Python查找CSV索引列匹配行 将对应值追加至目标行下方

并排相似实体数据集归置实现方案

问题描述

现有左右并排存储相似实体的电子表格数据集,需要将表格右侧的匹配数据,归置到左侧对应主条目所在列的下方。

  • 原始电子表格样例:原始表格样例
  • 目标实现效果:目标效果
  • 当前代码错误输出:当前控制台输出

待处理数据集结构

ID1Name1Country1Address1IDName2Country2Address2ScoreCity_Score
21125874-STONETURNUNITED STATES75 State St Ste 90231125874-STONETURNUNITED STATES75 State St Ste 902100100
101282357-VIMOUNITED STATES2595 E Bayshore Rd Ste 250111282357-VIMOUNITED STATES2595 E Bayshore Rd Ste 250100100
141296837-INFRAHEALTHUNITED STATES8705 Shoal Creek Blvd Ste 112151296837-INFRAHEALTHUNITED STATES8705 Shoal Creek Blvd Ste 112100100
171297217-BLAZEUNITED STATES81 Larkfield Rd181297217-BLAZEUNITED STATES81 Larkfield Rd100100
241330177-AWSCUSTOMER1UNITED STATES112 E Pecan St251330177-AWSCUSTOMER2UNITED STATES112 E Pecan St83100
271336739-FLEXTRADE-VMC-AWSUNITED STATES111 Great Neck Rd281336739-FLEXTRADE-VMC-AWSUNITED STATES111 Great Neck Rd100100
585719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800625719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800100100
585719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800615719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800100100
585719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800605719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800100100
585719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800595719679-ITACA TECHUNITED STATES1395 Brickell Ave Ste 800100100

原有代码错误点

原有实现代码如下:

import csv
import pandas as pd

df2 = df.copy()
def target(index_of_file):
    index = index_of_file
    for index3 in df2.index:
        print(df2['ID2'][index3],df['Name2'][index3], df['Address2'][index3],
          df['Country2'][index3])

df = pd.read_csv('file.csv')

for index in df.index:
    print(df['ID1'][index], ",", df['Name1'][index], ",", df['Address1'][index], ",",df['Country1'][index])
    Targetindex = df['ID1']
    target(Targetindex)

核心错误共3处:

  1. 执行顺序错误:df2 = df.copy()写在pd.read_csv读取文件之前,此时df变量未定义,代码会直接抛出名称错误。
  2. 字段引用错误:代码中引用的ID2字段在实际数据集中不存在,右侧匹配条目的ID列名就是ID;且函数内打印字段时混用df2和原始df,取值逻辑混乱。
  3. 匹配逻辑缺失:每遍历一行左侧主条目,就全量遍历所有右侧匹配条目打印,没有做关联匹配,导致所有右侧条目被重复打印(重复次数等于数据集总行数),完全没有实现归组效果。

修正实现代码

不需要写无意义的嵌套循环,基于pandas做拆分、去重、按关联ID拼接即可,运行效率和结果准确性都远高于逐行遍历:

import pandas as pd

# 读取原始数据
df = pd.read_csv('file.csv')

# 拆分左侧主条目表,统一列名
left_cols = ['ID1', 'Name1', 'Country1', 'Address1']
left_df = df[left_cols].rename(columns={
    'ID1': 'ID',
    'Name1': 'Name',
    'Country1': 'Country',
    'Address1': 'Address'
})
# 主条目去重,比如ID=58的主条目重复出现4次,仅保留1条
left_df = left_df.drop_duplicates(subset=['ID']).reset_index(drop=True)

# 拆分右侧匹配条目表,统一列名
right_cols = ['ID', 'Name2', 'Country2', 'Address2', 'Score', 'City_Score']
right_df = df[right_cols].rename(columns={
    'Name2': 'Name',
    'Country2': 'Country',
    'Address2': 'Address'
}).reset_index(drop=True)

# 按主条目归并,主条目在前,对应的所有匹配条目紧随其后
merge_result = []
for _, main_row in left_df.iterrows():
    # 写入当前主条目
    merge_result.append(main_row.to_dict())
    # 筛选当前主条目关联的所有匹配条目
    related_match = df[df['ID1'] == main_row['ID']].index
    match_rows = right_df.loc[related_match]
    for _, match_row in match_rows.iterrows():
        merge_result.append(match_row.to_dict())

# 转为DataFrame格式
final_df = pd.DataFrame(merge_result)

# 控制台打印验证,也可导出为csv文件
print(final_df)
final_df.to_csv('merged_entity_result.csv', index=False, encoding='utf-8-sig')

运行后输出的结构和目标效果完全一致,不会出现重复打印、条目错配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:48:14