python-3.x - 获取与列对应的值列表第一次出现的行索引
问题描述
我有一组值作为 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]
还
解决方案
如果有默认索引,它与位置相同,并且所有值都排序使用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]
推荐阅读
- reactjs - 离子选择器组件中的 onChange 钩子?
- qt - QTCPSocket 只能连接到两个网络之一?
- php - 在 Silverstripe 4 中将 Uploadfield 设置为覆盖
- javascript - 为什么这个函数在使用 include 方法时会抛出错误?
- regex - 用正则表达式函数返回值替换 DataFrame 中的值
- java - (Mac) jshell 找不到运行环境
- c# - 当两者都实现相同的接口时,将对象转换为另一个类的对象
- react-native - 如何在同一页面中从 React-native 中的多个 api 端点获取数据
- javascript - 使用 exec 在 javascript 中使用 args 运行 python 脚本
- c - 链接器:将除两个之外的所有函数移动到特定的内存区域