gpt4 book ai didi

python - Pandas Drop Very First Duplicate 仅

转载 作者:行者123 更新时间:2023-11-28 21:04:58 25 4
gpt4 key购买 nike

假设我有以下系列。

s = pandas.Series([0, 1, 2, 3, 3, 3, 3, 4, 5, 6, 6, 6, 7, 7])

我可以使用以下内容保留系列的第一个副本(对于每个重复值)

s[s.duplicated(keep='first')]

我可以使用以下内容保留系列的最后一个副本(对于每个重复值)

s[s.duplicated(keep='last')]

但是,我希望执行以下操作。

  1. 仅删除第一个重复项,保留该匹配值的其他重复项,但也保留所有其他不同值的重复项(包括每组中的第一个)。在上面的示例中,我们将删除第一个 3,但保留其他 3。保留所有其他剩余的副本。
  2. 保留第一个重复项,删除匹配值的重复项,但也保留其他不同值的所有其他重复项。在上面的示例中,我们将保留第一个 3,但删除所有其他 3。保留所有其他剩余的副本。

我一直在绞尽脑汁地使用 cumsum()diff() 来捕获检测到重复项时的变化。我想一个解决方案会涉及到这个,但我似乎无法得到一个完美的解决方案。我现在检查了太多真值表...

最佳答案

ind = s[s.duplicated()].index[0]

为您提供记录重复的第一个索引。用它来掉落。

In [45]: s.drop(ind)
Out[45]:
0 0
1 1
2 2
4 3
5 3
6 3
7 4
8 5
9 6
10 6
11 6
12 7
13 7
dtype: int64

对于第 2 部分,必须有一个简洁的解决方案,但我唯一能想到的是使用创建一系列 bool 值来指示索引不等于 ind 且索引处的值等于 ind 值的位置然后使用 np.logical_xor:

s[np.logical_xor(s.index != ind, s==s.iloc[ind])]

Out[95]:
0 0
1 1
2 2
4 3
7 4
8 5
9 6
10 6
11 6
12 7
13 7
dtype: int64

关于python - Pandas Drop Very First Duplicate 仅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44660283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com