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

pandas DataFrame删除指定行:按账号匹配删除对应行的问题

Pandas按账号匹配删除DataFrame指定行实现

需求说明

通过匹配两个CSV文件读取得到的DataFrame的账号列,删除第二个DataFrame(2019年会员数据)中与第一个DataFrame(2018年会员数据)账号相同的行。

原代码问题

你提供的原始实现采用了双重嵌套循环遍历账号列匹配,再逐行判断删除,存在两个明显问题:

  • 时间复杂度为O(n*m),数据量大时执行效率极低
  • 循环删除行的过程中DataFrame索引会动态变化,容易出现索引错位、匹配错误的问题

优化实现代码

直接用pandas内置的向量化操作实现,代码更简洁,执行效率大幅提升:

import pandas as pd

def main():
    # 读取2018年会员数据
    df1 = pd.read_csv("./2018/Member last activited.csv", 
                      sep=";", 
                      dtype={"Account Number": str}, 
                      encoding='ISO-8859-1', 
                      engine = 'python')
    # 读取2019年会员数据
    df2 = pd.read_csv("./2019/Member last activited062019.csv", 
                      sep=";", 
                      dtype={"Account Number": str, "Phone Number": str}, 
                      encoding='ISO-8859-1', 
                      engine = 'python')
    
    # 筛选出df2中账号不在df1账号列表中的行,直接覆盖得到处理后的df2
    df2 = df2[~df2["Account Number"].isin(df1["Account Number"])]

代码说明

  • df2["Account Number"].isin(df1["Account Number"]) 会判断df2每一行的账号是否存在于df1的账号列中,返回布尔值序列
  • 前缀的波浪符~是pandas中的取反操作,筛选出账号不匹配的行
  • 直接赋值给df2即可完成删除匹配行的需求,不需要手动循环处理索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:03:02