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

请求编写Python/Pandas代码实现两个CSV文件左连接并添加匹配状态

Python/Pandas实现CSV左连接并添加匹配状态

需求说明

以两个CSV文件的第一列为键执行左连接,同时为结果添加匹配状态标记(Match/No_match),替代卡顿的Excel批量数据处理方式。

示例数据

  • CSV1(主表):
AN  DNM OCD TRI
1   343 5656    90
2   344 5657    91
3   345 5658    92
4   346 5659    93
  • CSV2(关联表):
AN2 STATE   PLAN
4   3   19
3   2   35
7   3   19
8   3   19

实现代码

import pandas as pd

# 读取两个CSV文件,替换为你的实际文件路径
df1 = pd.read_csv('csv1.csv', sep='\s+')  # \s+适配空格/制表符混合分隔的格式
df2 = pd.read_csv('csv2.csv', sep='\s+')

# 执行左连接:以df1的AN列和df2的AN2列为匹配键
merged_df = pd.merge(
    df1,
    df2,
    left_on='AN',
    right_on='AN2',
    how='left'
)

# 添加匹配状态列:根据关联列是否为空判断
merged_df['Join Status'] = merged_df['STATE'].apply(
    lambda x: 'Match' if pd.notna(x) else 'No_match'
)

# 移除多余的AN2列(可选,按需保留)
merged_df = merged_df.drop('AN2', axis=1)

# 调整列顺序,将匹配状态列移至末尾(可选)
cols = merged_df.columns.tolist()
cols = cols[:-1] + [cols[-1]]
merged_df = merged_df[cols]

# 保存结果到新CSV,替换为你的目标路径
merged_df.to_csv('merged_result.csv', sep='\t', index=False)

# 打印查看结果
print(merged_df)

代码解释

  1. 文件读取:sep='\s+'适配空格/制表符混合分隔的格式,若你的CSV是逗号分隔,改为sep=','即可。
  2. 左连接逻辑:how='left'保证主表(CSV1)的所有行都保留,仅匹配关联表(CSV2)中符合条件的行。
  3. 状态标记:通过判断STATE列是否非空(pd.notna())标记匹配状态,用PLAN列判断效果一致。
  4. 结果处理:移除冗余的AN2列,调整列顺序后保存,index=False避免生成多余索引列。

运行结果

AN  DNM   OCD  TRI  STATE  PLAN Join Status
0   1  343  5656   90    NaN   NaN    No_match
1   2  344  5657   91    NaN   NaN    No_match
2   3  345  5658   92    2.0  35.0       Match
3   4  346  5659   93    3.0  19.0       Match

(若需要将NaN显示为空字符串,可添加merged_df = merged_df.fillna(''))

内容的提问来源于stack exchange,提问作者R. John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:19:21