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

Python中遍历DataFrame并按匹配条件更新df的C列值

解决DataFrame匹配更新的问题

嘿,我来帮你搞定这个DataFrame数据更新的需求!先给你指出原代码里的几个小问题:

  • for x in df2: 是在遍历df2的列名,不是逐行遍历,这完全达不到你想要的匹配效果
  • 你两个DataFrame都读取了同一个final.csv?应该是笔误吧,df2应该是包含E列的另一个文件才对
  • loc的用法也不对,匹配行应该用条件索引,而不是直接传列名

推荐:用Pandas向量化操作(高效不循环)

Pandas的核心优势就是向量化操作,比循环快得多,尤其是大数据集。下面是正确的实现步骤:

  1. 先正确读取两个文件(假设df2是另一个包含E列的csv):
import pandas as pd

# 读取第一个DataFrame(无E列)
df = pd.read_csv('final.csv', names=['A','B','C','D'])
# 读取第二个DataFrame(包含E列),注意这里应该是另一个文件,比如df2.csv
df2 = pd.read_csv('df2.csv', names=['A','B','C','D','E'])
  1. 按A、B列匹配,合并两个DataFrame,只保留需要的E列:
# 合并时只取df2的A、B、E列,避免重复列
merged = df.merge(df2[['A','B','E']], on=['A','B'], how='left')
  1. 更新df的C列:当匹配到对应行时,C = 原C + 0.5*E;没匹配到的话保持原C值不变
df['C'] = df['C'] + merged['E'].fillna(0) * 0.5

这样就完成了所有匹配行的更新,全程没有循环,效率拉满!

可选:逐行循环实现(不推荐大数据集)

如果一定要用循环的方式(仅小数据集建议用),可以这样写:

import pandas as pd

df = pd.read_csv('final.csv', names=['A','B','C','D'])
df2 = pd.read_csv('df2.csv', names=['A','B','C','D','E'])

# 把df2的A、B列转为元组,方便快速查找
df2_mapping = df2.set_index(['A','B'])['E'].to_dict()

# 遍历df的每一行
for idx, row in df.iterrows():
    key = (row['A'], row['B'])
    if key in df2_mapping:
        df.at[idx, 'C'] = row['C'] + df2_mapping[key] * 0.5

这个方法通过字典先把df2的匹配关系存起来,比直接嵌套循环快,但还是不如向量化操作高效。

内容的提问来源于stack exchange,提问作者Gheraibia Mohamed Yacine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:01:06