gpt4 book ai didi

python - 快速 python 算法(在 numpy 或 pandas 中?)查找与另一个数组中的元素匹配的数组元素的索引

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:09 26 4
gpt4 key购买 nike

我正在寻找一种快速方法来确定两个数组的交叉匹配索引,定义如下。

我有两个非常大的(>1e7 个元素)结构化数组,一个叫做members,另一个叫做groups。两个数组都有一个 groupID 列。 groups 数组的 groupID 条目是唯一的,members 数组的 groupID 条目不是。

groups 数组有一个名为mass 的列。 members 数组有一个名为 groupmass 的列(当前为空)。我想将正确的 groupmass 分配给 members 的那些元素,其中 groupID 与其中一个组匹配。这将通过以下方式完成:

members['groupmass'][idx_matched_members] = groups['mass'][idx_matched_groups]

所以我需要一个快速例程来计算两个索引数组 idx_matched_membersidx_matched_groups。这种任务似乎很常见,以至于像 numpy 或 pandas 这样的包似乎很可能会有一个优化的解决方案。有谁知道专业开发的、自制的或其他方式的解决方案?

最佳答案

这可以通过 pandas 使用 map 将一列的数据映射到另一列的数据来完成。这是一个示例数据示例:

members = pandas.DataFrame({
'id': np.arange(10),
'groupID': np.arange(10) % 3,
'groupmass': np.zeros(10)
})

groups = pandas.DataFrame({
'groupID': np.arange(3),
'mass': np.random.randint(1, 10, 3)
})

这为您提供了以下数据:

>>> members
groupID groupmass id
0 0 0 0
1 1 0 1
2 2 0 2
3 0 0 3
4 1 0 4
5 2 0 5
6 0 0 6
7 1 0 7
8 2 0 8
9 0 0 9
>>> groups
groupID mass
0 0 3
1 1 7
2 2 4

然后:

>>> members['groupmass'] = members.groupID.map(groups.set_index('groupID').mass)
>>> members
groupID groupmass id
0 0 3 0
1 1 7 1
2 2 4 2
3 0 3 3
4 1 7 4
5 2 4 5
6 0 3 6
7 1 7 7
8 2 4 8
9 0 3 9

如果你经常想使用 groupID 作为 groups 的索引,你可以永久设置它,这样你就不必每次都使用 set_index你这样做。

关于python - 快速 python 算法(在 numpy 或 pandas 中?)查找与另一个数组中的元素匹配的数组元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28130839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com