在 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)