在Pandas DataFrame中最快删除重复索引的方法

42 投票
3 回答
47767 浏览
提问于 2025-04-18 01:44

如果我想在一个数据表中去掉重复的索引,下面的方法显然是行不通的:

myDF.drop_duplicates(cols=index)

而且

myDF.drop_duplicates(cols='index') 

是去找一个叫做'index'的列

如果我想去掉一个索引,我得这样做:

myDF['index'] = myDF.index
myDF= myDF.drop_duplicates(cols='index')
myDF.set_index = myDF['index']
myDF= myDF.drop('index', axis =1)

有没有更有效的方法呢?

3 个回答

8

你可以使用 numpy.unique 来获取唯一值的索引,然后用 iloc 来获取这些索引对应的值:

>>> df
        val
A  0.021372
B  1.229482
D -1.571025
D -0.110083
C  0.547076
B -0.824754
A -1.378705
B -0.234095
C -1.559653
B -0.531421

[10 rows x 1 columns]

>>> idx = np.unique(df.index, return_index=True)[1]
>>> df.iloc[idx]
        val
A  0.021372
B  1.229482
C  0.547076
D -1.571025

[4 rows x 1 columns]
53

“duplicated”这个方法可以用在数据框和序列上。你只需要选择那些没有被标记为重复索引的行就可以了:

df[~df.index.duplicated()]
61

简单来说,就是用这段代码 DF.groupby(DF.index).first() 来对数据进行分组,然后取每组的第一个数据。

撰写回答