【问题标题】:Fastest Way to Drop Duplicated Index in a Pandas DataFrame [duplicate]在 Pandas DataFrame 中删除重复索引的最快方法 [重复]
【发布时间】: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)

有没有更有效的方法?

【问题讨论】:

标签: python pandas duplicate-removal


【解决方案1】:

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

【讨论】:

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

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

df[~df.index.duplicated()]

【讨论】:

  • 这会删除所有重复项吗?
  • 请注意,对于我调查的测试用例,这是最快的方法:stackoverflow.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] 会更快
猜你喜欢
  • 1970-01-01
  • 2015-10-07
  • 2020-11-22
  • 2012-12-20
  • 2018-05-07
  • 2018-03-19
  • 2012-10-13
相关资源
最近更新 更多