根据 Pandas 中的列数据删除 Excel 中的重复行

Drop Duplicate Rows in Excel based on Column Data in Pandas

我正在尝试使用 pandas 根据非常具体的条件删除 excel 文档中的重复条目。这是我的数据框的摘录:

       WD    MSN    TAIL REV
3425  30-11-11  26154  N754CX  IR
3426  30-21-11  26154  N754CX  IR
3427  31-31-11  26154  N754CX  IR
3428  31-31-41  26154  N754CX   A
3429  31-31-41  26154  N754CX   B

如您所见,我有两份 WD 31-31-41,我想只保留最新的版本,REV B。但是,几个不同的“MSN”号码也可能有这个WD,我不想影响那些条目。此外,我希望此代码对所有过去的修订都执行此操作,无论是 MSN 还是 WD。例如,另一个 MSN 可能有 32-46-11 的多个修订版,我只需要保留最新的一个。

我找到了如何使用以下方法在我的数据框中查找重复项:

df.iloc[3425:3430 , 0:4].duplicated(["WD","MSN"],'last')

输出:

3425    False
3426    False
3427    False
3428     True
3429    False
dtype: bool

但这只显示第一个条目为 True,但由于这些条目是由人输入的,因此最后一个条目不一定是最新的修订版。

假设最后一个条目是最新的部分答案。

>>> df.groupby(["WD", "MSN"]).tail(1)
            WD    MSN    TAIL REV
3425  30-11-11  26154  N754CX  IR
3426  30-21-11  26154  N754CX  IR
3427  31-31-11  26154  N754CX  IR
3429  31-31-41  26154  N754CX   B

更新后的问题表明“REV”列具有隐式顺序,因此我们可以创建具有显式顺序的 pandas.Categorical 列:

>>> df["REV"] = df["REV"].fillna("Unknown")  # To support NaN values
>>> df["REV"] = pd.Categorical(
        df["REV"],
        categories=["Unknown", "IR", "A", "B", "C"],
        ordered=True,
    )
>>> df.loc[df.groupby(["WD", "MSN"])["REV"].idxmax()]
            WD    MSN    TAIL REV
3425  30-11-11  26154  N754CX  IR
3426  30-21-11  26154  N754CX  IR
3427  31-31-11  26154  N754CX  IR
3429  31-31-41  26154  N754CX   B