【问题标题】:How to remove the duplicate among 3 rows in Python (Pandas)如何在 Python (Pandas) 中删除 3 行中的重复项
【发布时间】:2019-07-03 06:25:14
【问题描述】:

如何删除Team1和Team2中出现的这些重复的Team name,就像Australia出现在Match 0,1和Australia的对手一样,也是Winner的结果。

       Match      Team1         Team2         Winner 
       0      Australia       England      Australia 
       1        England     Australia      Australia    
       2          India     Australia      Australia
       3        England         India        England

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    您可以使用np.sortaxis=1 上的列进行排序,然后使用df.duplicated() 进行检查,并使用~False 转换为True,因此只有不重复的行是True,并且用作布尔掩码。:

    m=pd.DataFrame(np.sort(df[['Team1','Team2','Winner']],axis=1)).duplicated()
    df[~m]
    

       Match      Team1      Team2     Winner
    0      0  Australia    England  Australia
    2      2      India  Australia  Australia
    3      3    England      India    England
    

    【讨论】:

    • df[~m] -- IndexingError: Unalignable boolean Series提供为索引器(布尔系列的索引和索引对象的索引不匹配
    • @Danraptor“布尔系列的索引和索引对象的索引不匹配”原始df的索引是什么?
    • 0,1,2,3,4,5,6,7,8,9 -- 正如我认为你使用 np.sort 它将根据 m 中排序的 df 更改和存储索引,但原始 df 保持不变,因此会导致 Index Error 。这就是为什么通过删除 np.array 错误将被删除。
    • @Danraptor 我正在使用 np.sort 对 axis=1 上的列进行排序,一旦排序,.duplicated() 将识别重复项,您得到的错误是因为原始 df 的索引不是为了。所以你可以做一个 reset_index() 然后检查df[~m] 以保留索引
    • 是的,你是对的,因为我从 df 中删除了 NaN 列,但没有重置索引,所以这就是发生错误的原因,谢谢
    猜你喜欢
    • 2014-06-08
    • 2018-04-17
    • 1970-01-01
    • 2020-09-08
    • 2018-10-23
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多