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

使用Python对比两个CSV文件并为df_g新增匹配Price列的技术咨询

解决CSV匹配新增列的问题

我来帮你搞定这个匹配列的需求!先说说你原来代码的问题:直接用df_g['Sitio'] == df['Sitio']这种方式做判断,在pandas里是对整个列(Series)做逐元素比较,返回的是一堆布尔值,没法直接放在if条件里用;而且如果两个DataFrame的行数不一样,还会触发广播错误,这种逐行判断的思路在pandas里完全没必要,用merge关联才是正确的姿势。

你找到的merge方案方向是对的,但需要补全匹配的关键参数,避免潜在的错误,这里给你优化后的完整代码:

import pandas as pd

# 读取两个CSV文件
df = pd.read_csv('test2.csv')
df_g = pd.read_csv('test_hecho.csv')

# 基于Sitio和Country两列做左连接,只保留需要的Price列
# 提前筛选df的列能减少数据量,提升匹配效率
merged_result = df_g.merge(
    df[['Sitio', 'Country', 'Price']],  # 只取df中需要参与匹配和赋值的列
    on=['Sitio', 'Country'],  # 明确指定匹配的键列,避免同名列干扰
    how='left'  # 左连接保证df_g的所有行都保留,匹配不到的会填充NaN
)

# 把匹配到的Price赋值给df_g的新列Bidfloor
df_g['Bidfloor'] = merged_result['Price']

# 保存结果到新CSV,index=False避免保存索引列
df_g.to_csv('aaa.csv', index=False)

为啥这么写更靠谱:

  • 明确匹配键:用on参数指定Sitio和Country作为匹配依据,不会因为两个DataFrame有其他同名列导致匹配出错
  • 左连接保留原数据:how='left'确保df_g里的每一行都能保留,哪怕在df里找不到对应匹配的行,这时候Bidfloor会填充NaN,符合你的需求
  • 性能更优:pandas的merge是基于向量运算实现的,比你想的逐行读取判断效率高得多,尤其是数据量大的时候差距会很明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:07:57