Python 如何删除概念上的重复项?

Python 如何删除概念上的重复项?,python,pandas,Python,Pandas,我必须处理与此类似的数据集: Player CurrentTeam PreviousTeam 0 James Team A Null 1 David Team B Null 2 George Team C Null 3 James Team B Team A 4 James Team C Team B ... ... 在上面的例子中,James实际上是同一个玩家,在数据集中出现了3次。

我必须处理与此类似的数据集:

    Player  CurrentTeam  PreviousTeam
0   James   Team A       Null
1   David   Team B       Null
2   George  Team C       Null
3   James   Team B       Team A
4   James   Team C       Team B
... ...
在上面的例子中,James实际上是同一个玩家,在数据集中出现了3次。没有身份证之类的东西

这里发生的事情是,詹姆斯实际上是为C队踢球。在C队之前,他在B队,甚至在他进入A队之前(他的职业生涯就是从A队开始的)

然而,我只需要知道他现在的球队(即C队)

我能摆脱詹姆斯过去团队的所有其他事件吗?

基于中的技术,我们可以摆脱任何(球员,当前团队)组合,该组合作为(球员,先前团队)组合存在

使用

如果要检查以前的团队,请使用:

df.loc[~df.groupby('Player')['PreviousTeam']
          .shift(-1)
          .eq(df['CurrentTeam'])]
输出

   Player CurrentTeam PreviousTeam
1   David      Team B         Null
2  George      Team C         Null
4   James      Team C       Team B

对于这种情况,一种可能的解决方案是将
groupby
tail
一起使用:

df = df.groupby('Player').tail(1)
print(df)
输出

    Player CurrentTeam PreviousTeam
1   David       TeamB         Null
2  George       TeamC         Null
4   James       TeamC        TeamB

一般来说,你不能。你可能有一个循环,在这种情况下,不可能知道当前团队是什么。除非数据库是按照转会日期排序的,在这种情况下,您只需查看最后一个条目即可。@orlp我想这可能发生在他决定为Twitche队比赛的情况下。如果他只能在一支球队里踢一次,这样就再也不能回去了怎么办?那么有一个解决办法,如果你能保证的话。@orlp我们可以在某个例子中保证。为了找到解决方案,我需要编写普通Python吗?或者有一种类似熊猫的方法吗?如果条目是以转移的方式进行的,那么您可以简单地执行df.drop_duplicates(['Player'],keep='last')来获取每个玩家当前最新团队的行。只有在转移顺序为递增日期的假设成立的情况下,这种方法才有效。你应该在你的回答中包含这个假设。OP说:没有ID或类似的东西然而,我只需要知道他现在真正的团队(即C团队)。如果OP不使用时间序列对数据进行排序,我认为这是可以理解的,但我理解您的观点:)
df = df.groupby('Player').tail(1)
print(df)
    Player CurrentTeam PreviousTeam
1   David       TeamB         Null
2  George       TeamC         Null
4   James       TeamC        TeamB