首页 > 解决方案 > 获取与列对应的值列表第一次出现的行索引

问题描述

我有一组值作为 numpy 数组。我想找到 numpy 数组中的值首先出现的行索引

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'], 'year': [2012, 2012, 2013, 2014, 2014], 'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data)
mid = np.array([2012,2013])

我想在 year 列中找到值 2012 和 2013 的第一次出现的行索引。我的预期答案应该是

[0,2]

事实上,任何单个外观索引的行 ID 对我来说都可以。也就是说,我对答案没意见

[1,2]

标签: python-3.xpandasindexing

解决方案


如果有默认索引,它与位置相同,并且所有值都排序使用Series.searchsorted

idx = df['year'].searchsorted(mid).tolist()
print (idx)
[0, 2]

Series.isin具有inboolean indexing和第一个值的通用解决方案DataFrame.drop_duplicates,最后将索引转换为列表:

idx = df[df['year'].isin(mid)].drop_duplicates('year').index.tolist()
print (idx)
[0, 2]

推荐阅读