【问题标题】:Removing index duplicates in pandas删除熊猫中的索引重复项
【发布时间】:2018-01-23 18:55:52
【问题描述】:

在 pandas 中删除重复项时观察到一些看似不一致的行为。

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

数据描述() 平均买入卖出 数 3330 3330 3330

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

data.index.duplicated().any() 真的

数据中有多少重复项

data.loc[data.index.duplicated()].count() 平均 38 买 38 卖 38

也可以目视检查重复项

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

困境:显然,数据中有重复项,似乎每列有 38 个重复项。但是,当我使用 DataFrame 的 drop_duplicates() 时,似乎丢弃的数据比预期的要多。

`data.drop_duplicates().count()` 平均 3241 购买 3241 卖 3241 数据类型:int64 `data.count() - data.drop_duplicates().count()` 平均 89 买 89 卖 89

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

【问题讨论】:

    标签: pandas dataframe


    【解决方案1】:

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

    这将完成。

    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
    

    【讨论】:

    • 太棒了,正是我的目标。正如所指出的,我对 df.drop_duplicates() 的期望是它基于索引而不是数据下降,恰恰相反。
    • 也许对该函数的更新会很方便,允许设置一个标志来指示基于索引的丢弃,否则它当前的操作方式可能会导致不必要的观察丢失。
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 2018-07-04
    • 2019-04-12
    • 1970-01-01
    • 2016-09-03
    • 2015-06-28
    相关资源
    最近更新 更多