首页 >后端开发 >Python教程 >如何根据 Pandas 中的索引有效删除重复行?

如何根据 Pandas 中的索引有效删除重复行?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-18 18:26:02970浏览

How to Efficiently Remove Duplicate Rows Based on Indices in Pandas?

去除 Pandas 中重复索引的行

在数据分析场景中,可能会出现重复索引,需要高效去除此类行。本文探讨了使用广泛使用的 Pandas 库解决此问题的方法。

Pandas 的重复删除方法

Pandas 提供了几种基于索引删除重复行的方法value:

  • reset_index().drop_duplicates(subset='index').set_index('index'):此方法涉及重置 DataFrame 索引,使用 drop_duplicates( 识别重复项) ),并将原来的索引设置回索引column.
  • groupby().first():更简洁的方法包括按索引对 DataFrame 进行分组,并使用 first() 函数选择第一个出现的位置。
  • [~df3.index.duplicate(keep='first')]:duplicate方法直接对Pandas Index进行操作,能够在保留第一个实例的同时删除重复项。您可以使用 keep='last' 来保留重复项的最后一个实例。

性能比较

每种方法的时间复杂度根据大小而变化和 DataFrame 的复杂性。使用示例 DataFrame 对这些方法进行基准测试:

  • drop_duplicates(subset='index'): 由于其底层排序操作而性能最低。
  • groupby().first():性能略低于duplicated().
  • [~df3.index.duplicated(keep='first')]:最具性能和可读性。

示例演示

为了说明重复方法的使用,请考虑示例具有重复索引值的 DataFrame df3:

import pandas as pd
import datetime

# Example DataFrame with duplicate indices
startdate = datetime.datetime(2001, 1, 1, 0, 0)
enddate = datetime.datetime(2001, 1, 1, 5, 0)
index = pd.date_range(start=startdate, end=enddate, freq='H')
data1 = {'A' : range(6), 'B' : range(6)}
data2 = {'A' : [20, -30, 40], 'B' : [-50, 60, -70]}
df1 = pd.DataFrame(data=data1, index=index)
df2 = pd.DataFrame(data=data2, index=index[:3])
df3 = df2.append(df1)

print(df3)

# Remove duplicate rows with duplicate indices
df3 = df3[~df3.index.duplicated(keep='first')]

print(df3)

以上是如何根据 Pandas 中的索引有效删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn