根据 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
我正在尝试使用 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