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

Posted

技术标签:

【中文标题】在 Pandas DataFrame 中删除重复索引的最快方法 [重复]【英文标题】:Fastest Way to Drop Duplicated Index in a Pandas DataFrame [duplicate] 【发布时间】:2014-05-20 00:54:49 【问题描述】:

如果我想在数据框中删除重复的索引,由于显而易见的原因,以下方法不起作用:

myDF.drop_duplicates(cols=index)

myDF.drop_duplicates(cols='index') 

查找名为“索引”的列

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

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

有没有更有效的方法?

【问题讨论】:

***.com/questions/13035764/… @PaulH:Luciano 对你的问题的回答与我的问题相同,只是一行 【参考方案1】:

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

【讨论】:

@CT Zhu - 如果我使用这种方法,它会将我的两个索引列合并到一个列中。我不希望发生这种情况。有没有办法解决它? @liv2hak,介意用最小的示例数据集提出一个新问题吗? @CTZhu - 我已经弄清楚了。但是你能看看***.com/questions/33792915/….thanks @CTZhu 这会将 geopandas 数据框转换为 pandas 数据框,这可能会产生问题(它对我造成了影响)。【参考方案2】:

“复制”方法适用于数据框和系列。只需选择那些未标记为具有重复索引的行:

df[~df.index.duplicated()]

【讨论】:

这会删除所有重复项吗? 请注意,对于我调查的测试用例,这是最快的方法:***.com/questions/13035764/… 您也可以完全使用以下方法重现已接受答案的行为:df[~df.index.duplicated(keep='first)] keep 无论如何默认为first【参考方案3】:

您可以使用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]

【讨论】:

这要快得多.....如果你使用 df.ix[idx] 会更快

以上是关于在 Pandas DataFrame 中删除重复索引的最快方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在pandas DataFrame中选择和删除具有重复名称的列

从 Pandas DataFrame 列中删除特定符号(unicode)[重复]

根据条件 pandas 删除 DataFrame 中的重复行

pandas使用duplicated函数删除dataframe中重复列名称的数据列默认保留重复数据列中的第一个数据列(removing duplicate columns in dataframe)

如何从 Python Pandas DataFrame 中的循环结果中删除重复项?

根据列值删除Python Pandas中的DataFrame行[重复]