【Python】Pandas通过索引的方式去重df[~df.index.duplicated()]
创始人
2024-03-22 13:11:29

1.问题

在处理股票数据的时候,难免遇到去重的问题。对于以下数据,显然2020-01-04的数据重复了。
股票数据中,通常用date当成索引,一行数据的date应该都是唯一的。

import pandas as pddata = pd.DataFrame({'date': ['2020-01-04', '2020-01-04', '2020-01-05', '2020-01-06'], 'open': [102, 102,102, 105], 'close': [102, 102,102, 105]}).set_index('date')
print(data)
            open  close
date                   
2020-01-04   102    102
2020-01-04   102    102
2020-01-05   102    102
2020-01-06   105    105

数据中2020-01-05的open和close与2020-01-04的是一样的,但date又不一样,因此这里不需要对2020-01-05的数据做去重处理的,只需要对2020-01-04的两条数据去重。

如果利用常规的去重方法 df.drop_duplicates(),就会遇到以下问题:

a = data
print(a.drop_duplicates())
            open  close
date                   
2020-01-04   102    102
2020-01-06   105    105

返回的结果相当于把2020-01-05也当重复项做去重处理了。也就是使用 df.drop_duplicates() 方法,是针对于列做去重处理。因为2020-01-05的open和close与2020-01-04的是一样,所以前3条数据被当成重复性处理,就保留了重复数据中的第一条。然而这个结果并不是我们想要的。

正确是做法是对索引去重。

2.解决方法

对索引去重,也只需要用一行代码:df[~df.index.duplicated()]

print(data[~data.index.duplicated()])
            open  close
date                   
2020-01-04   102    102
2020-01-05   102    102
2020-01-06   105    105

这样的结果才是我们想要的。~df.index.duplicated() 方法是只针对索引做去重,而不考虑列数据,与 df.drop_duplicates() 相反。

3.完整代码

import pandas as pddata = pd.DataFrame({'date': ['2020-01-04', '2020-01-04', '2020-01-05', '2020-01-06'], 'open': [102, 102,102, 105], 'close': [102, 102,102, 105]}).set_index('date')
print(data)a = data
print('去重--只匹配列,不匹配索引')
print(a.drop_duplicates())print('去重--只匹配索引,不匹配列')
print(data[~data.index.duplicated()])
E:\Python\Python38-32\python.exe E:/python_project/test.pyopen  close
date                   
2020-01-04   102    102
2020-01-04   102    102
2020-01-05   102    102
2020-01-06   105    105
去重--只匹配列,不匹配索引open  close
date                   
2020-01-04   102    102
2020-01-06   105    105
去重--只匹配索引open  close
date                   
2020-01-04   102    102
2020-01-05   102    102
2020-01-06   105    105Process finished with exit code 0


 

相关内容

热门资讯

深刻把握党建引领基层治理的重大... 转自:光明日报基层是党的执政之基、力量之源。习近平总书记在庆祝中国共产党成立105周年大会上深刻总结...
PCB大牛股,净利暴增超150... 8月2日晚,一博科技(301366)披露2026年半年度报告,上半年公司实现营业收入7.09亿元,同...
四川宜宾高县发生4.8级地震,... 据中国地震台网正式测定,2026年8月3日2时21分,在四川宜宾市高县(北纬28.54度,东经104...
休达危机引爆欧盟内部冲突,美媒... 来源:环球【环球时报驻西班牙特约记者 刘章诗茵 戚容】“在当前国际形势下,欧盟不能存在这类自私、极化...
鲜美青岛 快乐“加满” (来源:中国旅游报)转自:中国旅游报   □ 本报记者 肖相波  7月下旬,仲夏夜晚,中国旅游报社记...