簡體   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