【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


 

相关内容

热门资讯

钱弘俶为何宁愿“亡国”也不一战... (来源:上观新闻)电视剧《太平年》的热播,让五代十国这个长期被忽略的乱世进入大众视野。剧集聚焦吴越国...
走近米兰冬奥会:冬奥会唯一允许... (来源:上观新闻)编者按:2026 米兰 - 科尔蒂纳丹佩佐冬奥会激战正酣,这场盛会于 2 月 6 ...
市民可自选“最美证件照”沉浸式... (来源:千龙网)民警指导市民操作身份证自助制证机春节临近,位于西单商圈的西单更新场警务服务站里,民警...
“贵客”成“常客” 龙虾“鲜”... (来源:天津日报)转自:天津日报  春节临近,节日餐桌少不了海鲜的身影,进口水产品也成为越来越多家庭...
12家第三方火车票销售平台被约... (来源:工人日报) 本报讯 (记者杨召奎)近日,北京市市场监督管理局组织12家涉及火车票网络销...