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

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


 

相关内容

热门资讯

光伏胶膜之困:业绩遭遇“滑铁卢... 转自:中国经营报本报记者 张英英 吴可仲 北京报道在光伏行业遭遇“寒冬”之际,其核心辅材——胶膜市场...
OpenAI架构转型未能如愿 ... 转自:中国经营网本报记者 曲忠芳 北京报道OpenAI的组织结构转型计划在历时4个月后未能如愿。5月...
银行抬高门槛防风险 网络“炒金... 近期国际金价呈现剧烈震荡行情。伦敦现货黄金价格4月突破3500美元/盎司关口后,近日又回落至3400...
抱团取暖的日本AI半吊子们 本文来自微信公众号:日商日旅,作者:KYOKU,题图来自:AI生成本篇为《为什么日本出不来DeepS...
特朗普谈对富人增税:“可能不该... 财联社5月10日讯(编辑 夏军雄)当地时间周五(5月9日),美国总统特朗普在社交媒体平台Truth ...
城发环境股份有限公司关于召开2... 证券代码:000885 证券简称:城发环境 公告编号:2025-038城发环境股份有限公司关于召开...
大中华区营收连续下滑 万亿苹... 转自:中国经营网本报记者 李玉洋 上海报道被质疑掉队LLM(大语言模型)的苹果公司在美国政府当前掀起...
山西华翔集团股份有限公司关于“... ■山西华翔集团股份有限公司关于“华翔转债”可选择回售的第三次提示性公告本公司董事会及全体董事保证本公...
梦网云科技集团股份有限公司关于... 证券代码:002123 证券简称:梦网科技 公告编号:2025-042梦网云科技集团股份有限公司关...
创新新材料科技股份有限公司关于... 证券代码:600361 证券简称:创新新材 公告编号:2025-035创新新材料科技股份有限公司关...
四川六九一二通信技术股份有限公... 证券代码:301592 证券简称:六九一二 公告编号:2025-025四川六九一二通信技术股份有限...
国机重型装备集团股份有限公司关... 证券代码:601399 证券简称:国机重装 公告编号:临2025-024国机重型装备集团股份有限公...
方正证券股份有限公司关于董事兼... 证券代码:601901 证券简称:方正证券 公告编号:2025-018方正证券股份有限公司关于董事...
贵州赤天化股份有限公司关于向关... 证券代码:600227 证券简称:赤 天 化 公告编号:2025-035贵州赤天化股份有限公司关于...
美年大健康产业控股股份有限公司... 证券代码:002044 证券简称:美年健康 公告编号:2025-028美年大健康产业控股股份有限公...
北方稀土相关公司新增一项236... (转自:快查一企业中标了)快查APP显示,北方稀土相关公司内蒙古包钢钢联股份有限公司营销中心于202...
北方稀土相关公司新增一项214... (转自:快查一企业中标了)快查APP显示,北方稀土相关公司内蒙古包钢钢联股份有限公司营销中心于202...
美国驻基辅大使馆警告 未来几天...   美国驻基辅大使馆周五警告称,未来几天可能发生“重大”空袭。  美国驻基辅大使馆在其网站上称:“美...
中国中铁全资子公司新增一项13... (转自:快查一企业中标了)快查APP显示,中国中铁相关公司中铁二局于2025年5月10日发布一则招标...
湘潭电化科技股份有限公司关于向... 证券代码:002125 证券简称:湘潭电化 公告编号:2025-024湘潭电化科技股份有限公司关于...