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

使用Pandas基于三列删除CSV重复行仅生效一次的问题求助

基于多列删除CSV中的所有重复行

我有一个CSV文件,需要基于instrument_token、exchange_token、tradingsymbol三列删除重复行。尝试了以下代码,但仅删除了一次重复项,无法移除所有重复行。

ins.csv内容:

sr,instrument_token,exchange_token,tradingsymbol,name
4,367376,2112,nf50,nf50
9,361216,2127,nfbf,nfbf
4,367376,2112,nf50,nf50
9,361216,2127,nfbf,nfbf
4,367376,2112,nf50,nf50
9,361216,2127,nfbf,nfbf
4,367376,2112,nf50,nf50
9,361216,2127,nfbf,nfbf
4,367376,2112,nf50,nf50
9,361216,2127,nfbf,nfbf
4,367376,2112,nf50,nf50
9,361216,2127,nfbf,nfbf

原Python代码:

import pandas as pd
import numpy as np

ins = pd.read_csv('ins.csv')

new_ins = ins[pd.DataFrame(np.sort(ins[['instrument_token','exchange_token','tradingsymbol']].values.astype(str),1)).duplicated()]

new_ins.to_csv('ins.csv', mode='w', header=new_ins.columns.tolist(), index=False)

问题分析

你原代码的逻辑完全搞反了:

  1. pd.DataFrame(...).duplicated()会标记出重复出现的行,然后ins[这个布尔序列]是把这些重复行筛选出来保留,等于反过来保留了重复项,而不是删除它们。
  2. 另外对列值排序后再判断重复是多余操作——你的需求是基于这三列的原始组合去重,不需要排序。

正确解决方案

用pandas内置的drop_duplicates()方法就能直接解决,它专门处理重复行,支持指定多列作为去重依据:

1. 保留每组重复行的第一个实例,删除后续重复(最常用)

import pandas as pd

# 读取CSV文件
ins = pd.read_csv('ins.csv')

# 指定去重的三列,保留第一组出现的行
new_ins = ins.drop_duplicates(
    subset=['instrument_token', 'exchange_token', 'tradingsymbol'],
    keep='first'
)

# 写入回CSV,不要保留索引
new_ins.to_csv('ins.csv', index=False)

2. 删除所有重复行(包括第一个实例)

如果只要某组三列值重复,就把所有对应行都删掉,用keep=False:

import pandas as pd

ins = pd.read_csv('ins.csv')
new_ins = ins.drop_duplicates(
    subset=['instrument_token', 'exchange_token', 'tradingsymbol'],
    keep=False
)
new_ins.to_csv('ins.csv', index=False)

3. 保留每组重复行的最后一个实例

如果需要保留最后一次出现的行,删除前面的重复项:

import pandas as pd

ins = pd.read_csv('ins.csv')
new_ins = ins.drop_duplicates(
    subset=['instrument_token', 'exchange_token', 'tradingsymbol'],
    keep='last'
)
new_ins.to_csv('ins.csv', index=False)

处理后效果

用方案1处理后的ins.csv会只剩两行(每组重复的第一行):

sr,instrument_token,exchange_token,tradingsymbol,name
4,367376,2112,nf50,nf50
9,361216,2127,nfbf,nfbf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:03:27