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

Ruk*_*ech 24 python duplicate-removal pandas

如果我想在数据帧中删除重复索引,则以下原因不明显:

myDF.drop_duplicates(cols=index)
Run Code Online (Sandbox Code Playgroud)

myDF.drop_duplicates(cols='index') 
Run Code Online (Sandbox Code Playgroud)

查找名为"index"的列

如果我想删除索引,我必须做:

myDF['index'] = myDF.index
myDF= myDF.drop_duplicates(cols='index')
myDF.set_index = myDF['index']
myDF= myDF.drop('index', axis =1)
Run Code Online (Sandbox Code Playgroud)

有更有效的方法吗?

CT *_*Zhu 39

只是: DF.groupby(DF.index).first()


小智 24

'重复'方法适用于数据帧和系列.只需选择那些未标记为具有重复索引的行:

df[~df.index.duplicated()]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于我调查的测试用例,这是最快的方法:http://stackoverflow.com/questions/13035764/remove-rows-with-duplicate-indices-pandas-dataframe-and-timeseries/34297689#34297689您还可以使用以下命令重现已接受答案的行为:`df [~df.index.duplicated(keep ='first)]` (4认同)
  • 无论如何,“keep”默认为“first”。 (2认同)

beh*_*uri 5

您可以使用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]
Run Code Online (Sandbox Code Playgroud)

  • 这快得多......如果你使用df.ix [idx]会更快 (2认同)