【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


 

相关内容

热门资讯

中光学聘任61岁刘洋为非独立董... 6月18日,中光学公告,聘任刘洋先生为公司非独立董事。资料显示,刘洋,男,1965年出生,中国国籍,...
丽尚国潮股东杭州骥瑜商业管理有... 6月18日消息,丽尚国潮股东杭州骥瑜商业管理有限公司于2026年6月16日,通过大宗交易方式减持15...
国盛证券总经理赵景亮新任董事,... 6月18日,国盛证券公告,聘任赵景亮先生为公司董事。资料显示,赵景亮先生,1978年12月出生,特许...
成人超重率超三成 我国肥胖形势... (来源:千龙网)新华社北京6月17日电 当前我国成人超重率约为34.3%,肥胖率约为16.4%;6岁...
卢浮宫馆长称该博物馆已“不堪重... (来源:千龙网)新华社巴黎6月17日电 法国卢浮宫博物馆馆长克里斯托夫·勒里博17日就博物馆内设施设...