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