【问题标题】:Pandas: unique dataframe熊猫:独特的数据框
【发布时间】:2012-09-01 14:43:01
【问题描述】:

我有一个重复行的 DataFrame。我想获得一个具有唯一索引且没有重复项的 DataFrame。可以丢弃重复的值。这可能吗?会不会是由groupby 完成的?

【问题讨论】:

    标签: python pandas


    【解决方案1】:
    In [29]: df.drop_duplicates()
    Out[29]: 
       b  c
    1  2  3
    3  4  0
    7  5  9
    

    【讨论】:

    • 值得注意的是,这需要第一次或最后一次出现。所以你需要先按其他数量排序(如果你幸运的话)或者做一些复杂的 groupby 逻辑。
    • 这是错误的。 drop_duplicates 仅作用于值(至少在我的版本中)。如果要删除索引和值,则需要 reset_index ,或者如果要拥有唯一索引,则只需使用索引。也许除了 groupby 之外还有另一种方法来强制执行唯一索引?
    • 如果您不想分配新变量,请使用df.drop_duplicates(inplace=True)
    • 这并没有给出具有唯一索引的数据框,下面是@Adam Greenhall 的解决方案,但是适用于此
    【解决方案2】:

    通过阅读split-apply-combine 文档示例找到了一种方法。

    df = pandas.DataFrame({'b':[2,2,4,5], 'c': [3,3,0,9]}, index=[1,1,3,7])
    df_unique = df.groupby(level=0).first()
    
    df
       b  c
    1  2  3
    1  2  3
    3  4  0
    7  5  9
    
    df_unique
       b  c
    1  2  3
    3  4  0
    7  5  9
    

    【讨论】:

    • 这依赖于复制数据字段 (b,c) 的行的行索引,有效地使行的索引部分成为您想要唯一的向量(不重复) .
    • 如果您有重复的索引条目,这就是您想要的答案。
    • 在 MultIndex 上执行 unstack 时,我得到了 ValueError: Index contains duplicate entries, cannot reshape,但这个解决方案只适用于我必须这样做 df_unique = df.groupby(level=[0,1]).first()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2019-08-09
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多