删除pandas中的索引重复项

时间:2018-01-23 18:55:53

标签: pandas dataframe

在删除pandas中的重复项时,会发现一些看似不一致的行为。

问题设置:我有一个包含三列和3330个时间序列观测数据的数据框,如下所示:

data.describe()
       Mean    Buy  Sell
count  3330    3330  3330

检查数据是否包含任何重复项,表明存在重复索引。

data.index.duplicated().any()
True

数据中有多少重复

data.loc[data.index.duplicated()].count()
Mean    38
Buy     38
Sell    38

也可以目视检查副本

 `data[data.index.duplicated()]`

困境:显然,数据中存在重复数据,似乎每列有38个数据。但是,当我使用DataFrame的drop_duplicates()时,似乎有更多的数据被丢弃。

`data.drop_duplicates().count()`
Mean    3241
Buy     3241
Sell    3241
dtype: int64
`data.count() - data.drop_duplicates().count()` 
Mean    89
Buy     89
Sell    89

任何有关这种差异的原因或我错过的细节的想法都将不胜感激。注意:可能有类似的数据条目,但日期不应重复,因此清理数据的合理方法是删除重复的日期。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想只保留索引中有重复项的第一次出现(行/记录)吗?

这将实现这一点。

import pandas as pd
df = pd.DataFrame({'IDX':[1,2,2,2,3,4,5,5,6], 
                 'Mean':[1,2,3,4,5,6,7,8,9]}).set_index('IDX')
df
     Mean
IDX      
1       1
2       2
2       3
2       4
3       5
4       6
5       7
5       8
6       9
duplicates = df.index.duplicated()
duplicates
array([False, False,  True,  True, False, False, False,  True, False])
keep = duplicates == False
df.loc[keep,:]
     Mean
IDX      
1       1
2       2
3       5
4       6
5       7
6       9