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

42

如果我想在数据框中删除重复的索引,下面的方法由于明显的原因无法实现:

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)

有更有效率的方法吗?


1
https://dev59.com/9Gcs5IYBdhLWcg3wOBRC - Paul H
1
@PaulH:Luciano的回答与我的问题相同,只是用了一行代码。 - RukTech
3个回答

60

Simply: DF.groupby(DF.index).first()


@CT Zhu - 如果我使用这种方法,它会将我的两个索引列合并成一列。我不希望发生这种情况。有没有解决办法? - liv2hak
@liv2hak,请问能否提供一个最小化的数据集并提出新问题吗? - CT Zhu
@CTZhu - 我已经弄清楚了。但是你能看一下http://stackoverflow.com/questions/33792915/pandas-mean-calculation-over-a-column-in-a-csv吗?谢谢。 - liv2hak
@CTZhu 这将geopandas数据框转换为pandas数据框,这可能会导致问题(对我来说确实如此)。 - Duccio Piovani

53

'duplicated'方法适用于数据帧和序列。只需选择那些没有被标记为具有重复索引的行:

df[~df.index.duplicated()]

这会删除所有的重复项吗? - The Unfun Cat
11
请注意,这是我调查的测试案例中最快的方法:https://dev59.com/9Gcs5IYBdhLWcg3wOBRC#34297689 您也可以使用以下代码完全复制已接受答案的行为:df[~df.index.duplicated(keep='first)] - n8yoder
2
keep 默认就是 first - Jérôme

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]

2
这个要快得多......如果使用 df.ix[idx],甚至更快。 - baconwichsand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接