我知道这是一个非常基本的问题,但出于某种原因,我找不到答案。我怎样才能得到在python熊猫系列的某些元素的索引?(第一种情况就足够了)
例如,我想要这样的东西:
import pandas as pd
myseries = pd.Series([1,4,0,7,5], index=[0,1,2,3,4])
print myseries.find(7) # should output 3
当然,可以用循环来定义这样的方法:
def find(s, el):
for i in s.index:
if s[i] == el:
return i
return None
print find(myseries, 7)
但我想应该有更好的办法。是吗?
In [92]: (myseries==7).argmax()
Out[92]: 3
如果你提前知道7在那里,这个方法是可行的。你可以用
(myseries = = 7) .any ()
另一种方法(与第一个答案非常相似)也解释了多个7(或没有)
In [122]: myseries = pd.Series([1,7,0,7,5], index=['a','b','c','d','e'])
In [123]: list(myseries[myseries==7].index)
Out[123]: ['b', 'd']
如果你使用numpy,你可以得到一个indecies数组,你的值被找到:
import numpy as np
import pandas as pd
myseries = pd.Series([1,4,0,7,5], index=[0,1,2,3,4])
np.where(myseries == 7)
返回一个单元素元组,包含一个indecies数组,其中7是myseries中的值:
(array([3], dtype=int64),)
In [92]: (myseries==7).argmax()
Out[92]: 3
如果你提前知道7在那里,这个方法是可行的。你可以用
(myseries = = 7) .any ()
另一种方法(与第一个答案非常相似)也解释了多个7(或没有)
In [122]: myseries = pd.Series([1,7,0,7,5], index=['a','b','c','d','e'])
In [123]: list(myseries[myseries==7].index)
Out[123]: ['b', 'd']
另一种方法是:
s = pd.Series([1,3,0,7,5],index=[0,1,2,3,4])
list(s).index(7)
返回:
3.
在使用我正在使用的当前数据集进行的时间测试中(认为它是随机的):
[64]: %timeit pd.Index(article_reference_df.asset_id).get_loc('100000003003614')
10000 loops, best of 3: 60.1 µs per loop
In [66]: %timeit article_reference_df.asset_id[article_reference_df.asset_id == '100000003003614'].index[0]
1000 loops, best of 3: 255 µs per loop
In [65]: %timeit list(article_reference_df.asset_id).index('100000003003614')
100000 loops, best of 3: 14.5 µs per loop