【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


 

相关内容

热门资讯

中衡设计(603017.SH)... 格隆汇4月22日丨中衡设计(603017.SH)发布2025年年报显示,公司全年实现营业收入11.7...
海港人寿总经理变更:齐美祝任临...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   每经记者|涂颖浩...
出息了!德国市长试乘贵州造无人...   2026年4月21日,德国东部城市开姆尼茨。市政厅门前,一辆圆润的胶囊状小巴缓缓驶出。车内坐着三...
谷歌推出AI训练与推理专用芯片...   核心要点谷歌将推出一款专门运行人工智能模型的芯片,同时推出另一款独立处理器用于模型训练。亚马逊也...
龙腾光电修订公司章程及多项治理... 4月23日,龙腾光电(证券代码:688055)发布公告称,公司于2026年4月22日召开第三届董事会...