python - 获取另一个系列中一个系列的元素的索引列表
问题描述
抱歉标题令人困惑,但我不知道如何在没有示例的情况下解释这一点。
我需要从另一个系列中的一个系列中获取项目位置列表。我给出的例子如下:
ser1 = pandas.Series([10, 9, 6, 5, 3, 1, 12, 8, 13])
ser2 = pandas.Series([1, 3, 10, 13])
解决方案应该是[5, 4, 0, 8]
我首先想到的是使用numpy.where(ser1.isin(ser2))
,但我得到的 idex 数组的顺序错误:[0, 4, 5, 8]
如果我使用ser2.isin(ser1)
,我会得到一个布尔值数组。有没有办法获取元素的索引而不是这个?或者使用其他方法解决这个问题的任何其他方法?
解决方案
在 numpy 中使用广播进行比较以argmax
获得正确的排序:
out = (ser2.to_numpy() == ser1.to_numpy()[:, None]).argmax(axis=0)
[5, 4, 0, 8]
如果某些值与np.where
and不匹配,则解决方案any
:
ser1=pd.Series([10, 9, 6, 1, 3, 1, 12, 8, 13])
ser2 = pd.Series([1, 3, 10, 130])
m = ser2.to_numpy() == ser1.to_numpy()[:, None]
out = np.where(m.any(axis=0), m.argmax(axis=0), np.nan)
print (out)
[ 3. 4. 0. nan]
推荐阅读
- python - 通过逗号和透视解析数据框列 - python
- javascript - 在 Angular 6 中访问嵌套数组
- jquery - 当鼠标悬停在一个图像上时,jquery 或 CSS 会使其余图像变暗
- c++ - 代码::块:无法打开文件:../libgcc/unwind-sjlj.c
- wordpress - 获取分类字段的祖先类别术语的 slug (Wordpress / ACF)
- php - PHP数组二维,如何检查2个值是否在里面以及它们的位置
- node.js - 不会使用 Visual Studio 代码更新 npm
- php - 请描述如何使用 Quickbooks PHP SDK 查询包含特定服务日期的行项目的 Quickbooks 发票
- python - 基于用户输入的 Python Turtle 问题绘图
- javascript - jQuery fadeOut 在点击时不起作用