如何在Pandas系列中找到与某个值匹配的最后一个出现索引?

taor4pac  于 2022-12-16  发布在  其他
关注(0)|答案(5)|浏览(219)

如何在Pandas系列中找到某个值的 last occurrence索引?
例如,假设我有一个如下所示的Series:

s = pd.Series([False, False, True, True, False, False])

我想找到True值的最后一个索引(即索引3),你会怎么做?

jei2mxaa

jei2mxaa1#

使用last_valid_index

s = pd.Series([False, False, True, True, False, False])
s.where(s).last_valid_index()

输出:

3

使用@user3483203示例

s = pd.Series(['dog', 'cat', 'fish', 'cat', 'dog', 'horse'], index=[*'abcdef'])
s.where(s=='cat').last_valid_index()

产出

'd'
nfs0ujit

nfs0ujit2#

使用nonzero

s.nonzero()[0][-1]
Out[66]: 3

字符串

t98cgbkg

t98cgbkg3#

如果您在布尔数组中查找,则可以在反向系列上使用np.argmax

>>> len(s) - np.argmax(s[::-1].values) - 1
3

如果您正在查找另一个值,只需使用==将其转换为布尔数组
下面是查找dog最后一次出现的示例:

>>> s = pd.Series(['dog', 'cat', 'fish', 'cat', 'dog', 'horse'])
>>> len(s) - np.argmax(s[::-1].values=='dog') - 1
4

然而,这将给予你一个数字索引。如果你的系列有一个自定义索引,它不会返回那个。

34gzjxbg

34gzjxbg4#

可以将生成器表达式用于nextenumerate

s = pd.Series([False, False, True, True, False, False])

res = len(s) - next(idx for idx, val in enumerate(s[::-1], 1) if val)  # 3

这对于接近末尾具有True值的大型系列将更有效。

3duebb1j

3duebb1j5#

我发现这个问题的最佳解决方案如下,假设Pandas系列存储在变量s中

~s.duplicated(keep="last")

这将返回一个panda系列,指示该行是否包含每个值的最后一次出现

相关问题