python - 过滤值的访问索引

标签 python pandas

在这里,我根据谓词访问系列的值:

import numpy as np

s = pd.Series(np.array([1,2,3]))
print(type(s))

print([i for i in s if i > 2])

返回:

<class 'pandas.core.series.Series'>
[3]

如何访问与谓词匹配的值的索引,因此在本例中索引为 2

最佳答案

使用boolean indexing使用索引:

print (s.index[s > 2])
#alternative
#print (s[s > 2].index)
Int64Index([2], dtype='int64')

您的解决方案应更改为 Series.items :

print([k for k, v in s.items() if v > 2])
[2]

性能在更大的数据中是不同的:

np.random.seed(45)
s = pd.Series(np.random.randint(5, size=100000))

#print (s)

In [93]: %timeit ([k for k, v in s.items() if v > 2])
13.3 ms ± 768 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [94]: %timeit (s.index[s > 2])
930 µs ± 12.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [95]: %timeit (s[s > 2].index)
1.74 ms ± 26.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [96]: %timeit (s.index[s.values > 2])
742 µs ± 79.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [97]: %timeit (s.index.values[s.values > 2])
647 µs ± 12.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [98]: %timeit (s[s.values > 2].index.values)
1.51 ms ± 12.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - 过滤值的访问索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377647/

相关文章:

python - numpy blit(将数组的一部分复制到另一个具有不同大小的数组)

python - 从 json 对象创建 pandas 数据框

python - 使用 matplotlib 的 pandas 创建 seaborn 绘图

python - Pandas ,根据某些列值和 NAN 组合行

python - 使用 Python 将照片或视频上传到 Facebook

python - 在 Django 中使用用户 ID 获取用户对象

python - 进入新页面时, Selenium 会丢失 session

python - 将嵌套 JSON 解析为一个数据文件

python - 在 Pandas 中如何反转十进制表示法?

python - 如何更改Python中条形图的顺序?