代码之家  ›  专栏  ›  技术社区  ›  Jan

Pandas:删除具有相同“舍入”值的重复行,而不创建新列

  •  1
  • Jan  · 技术社区  · 6 年前

    B C

    import pandas as pd
    df = pd.DataFrame({"A":["f1", "f2", "f3", "f4"], "B":[1.2579,1.2586,1.7223,1], "C":[8.2579,8.2586,12.7223,14.0]})
    
       A       B        C
    0  f1  1.2579   8.2579
    1  f2  1.2586   8.2586
    2  f3  1.7223  12.7223
    3  f4  1.0000  14.0000
    

    这里,排 0 1 四舍五入后具有相同的值。而不是创建列 B_round C_round 像这样删除副本

    df['B_round'] = df['B'].values.round(2)
    df['C_round'] = df['C'].values.round(2)
    df = df.drop_duplicates(subset=['B_round', 'C_round'], keep='first')
    

    我必须再次删除列

    df = df.drop(['B_round', 'C_round'], axis=1)
       A       B        C
    0  f1  1.2579   8.2579
    2  f3  1.7223  12.7223
    3  f4  1.0000  14.0000
    

    因为我的真实数据很大。有没有办法在不创建新列集的情况下删除它们?

    1 回复  |  直到 6 年前
        1
  •  0
  •   jezrael    6 年前

    使用 DataFrame.duplicated 使用反转布尔掩码 ~ boolean indexing :

    df = df[~df[['B', 'C']].round(2).duplicated()]
    
    print (df)
        A       B        C
    0  f1  1.2579   8.2579
    2  f3  1.7223  12.7223
    3  f4  1.0000  14.0000
    

    另一个解决方案-乘以 100 并将值转换为 integer 学生:

    df = df[~df[['B', 'C']].mul(100).astype(int).duplicated()]