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

如何在pandas的drop_duplicates中指定前n-1列作为subset参数?

解决DataFrame.drop_duplicates指定前n-1列为subset的问题

嘿,我来帮你搞定这个问题~你之前的代码报错,是因为给subset参数传值的方式不对,咱们一步步来修正:

错误原因

你写的subset=[0:df.shape[1]-1]是无效的Python语法——列表里不能直接使用切片表达式(比如0:xx),subset需要的是列名的列表或者列索引的列表,得把切片转换成实际的列表元素才行。

解决方案

假设我们先构造你给出的示例数据集:

import pandas as pd

data = [
    [0, 12, 1, 99, 23, 2, 75],
    [0, 12, 1, 99, 23, 2, 66],
    [5, 12, 1, 99, 23, 2, 66]
]
df = pd.DataFrame(data, columns=[0,1,2,3,4,5,6])

这里总列数是7,我们需要把前6列(也就是除了最后一列之外的所有列)作为去重依据,有两种简单的实现方式:

方法1:用列索引列表

通过range()生成前n-1列的索引,再转换成列表:

df.drop_duplicates(subset=list(range(df.shape[1]-1)), keep='first', inplace=True)
  • df.shape[1]获取总列数,df.shape[1]-1就是前n-1列的数量,range(df.shape[1]-1)生成0到5的索引序列,转成列表后正好是前6列的索引。

方法2:用列名切片

直接对df.columns(列名序列)做切片,去掉最后一列:

df.drop_duplicates(subset=df.columns[:-1], keep='first', inplace=True)
  • df.columns[:-1]会返回除了最后一列之外的所有列名,完美符合你要的前n-1列的需求。

验证结果

执行上面任意一种代码后,你的DataFrame会保留索引0和2的行,结果如下:

0   1  2   3   4  5   6
0  0  12  1  99  23  2  75
2  5  12  1  99  23  2  66

完全符合你的预期~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:33:08