pandas系列||获取字符串索引(如果存在)

pandas series || get index of string if present

请多多包涵。我是 pandas 的新手并在其中使用系列。

import pandas as pd

s = pd.Series(["koala", "dog", "chameleon"])

'dog' in s.values - 这允许测试它是否存在。

s.isin(['dog']).any() - 这是真的。但是没有办法获取索引或使用查找。

如何找到“狗”的 index/location?

其次,如果我有重复条目(例如狗):

s = pd.Series(["koala", "dog", "chameleon","dog"])

我怎样才能找到第一次或最后一次出现?

我在 python 3X (OS X, M1):
Python 3.9.8 (v3.9.8:bb3fdcfe95, Nov 5 2021, 16:40:46) [Clang 13.0.0 (clang-1300.0.29.3)] on darwin

更改过滤器 index 的布尔掩码顺序并使用 iter:

获取 next 中的最后一个值
m = s.eq('dog')[::-1]
#if list
m = s.isin(['dog'])[::-1]

print (next(iter(m.index[m]), 'no match'))
3

如果总是匹配更简单的是使用:

print (m[m].index[-1])
3

您可以使用 [].index 获取 series 中值的索引。

s = pd.Series(["koala", "dog", "chameleon"])
s[s == 'dog'].index

同样使用min()max()得到第一次和最后一次出现:

s = pd.Series(["koala", "dog", "chameleon","dog"])
d_first, d_last = s[s == 'dog'].index.min(), s[s == 'dog'].index.max()

我平时做的是:

#....in clause like
i = s.index[s.str.contains('dog')]

这对应于一个“in”子句。如果你想要正确的匹配,你可以去 "eq":

i2 = s.index[s.eq('dog')]

在这种情况下,它们当然会产生相同的索引。