繁体   English   中英

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

[英]How to find last occurence index matching a certain value in a Pandas Series?

如何找到 Pandas 系列中某个值的最后出现索引?

例如,假设我有一个如下所示的系列:

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

而我想找到一个True值的最后一个索引(即索引 3),你会如何 go 呢?

使用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'

使用nonzero

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

如果您正在查看布尔数组,您可以在反向系列上使用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

但是,这将为您提供数字索引。 如果您的系列具有自定义索引,则不会返回该索引。

您可以在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值的大型系列,这将更有效。

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

~s.duplicated(keep="last")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM