沿着 DataFrame 中的行处理重复项并删除 Python Pandas 中除最后一个以外的所有内容

Working through duplicates along rows in DataFrame and deleting all except the last one in Python Pandas

我在 Pandas 数据清理中苦苦挣扎。我做了一个简单的例子来证明我的问题。对于每一行,我想删除重复项并保留最后一行。目前,我的 DataFrame 是 'animals'。我希望它成为 DataFrame 'animals_clean'

想象一下这个 DataFrame。您可以看到沿 axis=0 的重复项,例如'cat' 在第 0 行重复

list_of_animals = [['cat','dog','monkey','sparrow', 'cat'],['cow', 'eagle','rat', 'eagle', 'owl'],['deer', 'horse', 'goat', 'falcon', 'falcon']]
animals = pd.DataFrame(list_of_animals)

外观:

这就是我想要的结果。您可以看到每一行中的重复项都被标记为 'X' 保留最后一个。

list_of_animals_clean = [['X','dog','monkey','sparrow', 'cat'],['cow', 'X','rat', 'eagle', 'owl'], ['deer', 'horse', 'goat', 'X', 'falcon']]
animals_clean = pd.DataFrame(list_of_animals_clean)

应该看起来像:

尝试 apply + mask + duplicated 和 keep='last':

import pandas as pd

list_of_animals = [['cat', 'dog', 'monkey', 'sparrow', 'cat'],
                   ['cow', 'eagle', 'rat', 'eagle', 'owl'],
                   ['deer', 'horse', 'goat', 'falcon', 'falcon']]
animals = pd.DataFrame(list_of_animals)

animals = animals.apply(
    lambda s: s.mask(s.duplicated(keep='last'), 'x'),
    axis=1
)

print(animals)

输出:

      0      1       2        3       4
0     x    dog  monkey  sparrow     cat
1   cow      x     rat    eagle     owl
2  deer  horse    goat        x  falcon