You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用向量化方法从DataFrame中按Numpy数组提取HHt列值(无需循环)

问题:如何用向量化方法替代循环提取DataFrame指定索引的HHt列值?

给定如下numpy数组,能否不使用for循环,而是通过向量化方法返回DataFrame中HHt列的对应值?

示例数组:

ex_arr = [2643, 2644, 2647]

原循环实现代码:

for i in ex_arr:
    h_p = df.at[i, "HHt"]

示例DataFrame:

索引HHt
26431
26442
26453
26464
26475
26486
26497
26508

预期结果:输出 1、2、5 对应的值。


解决方案

完全可以用向量化操作替代循环,以下是几种高效的实现方式:

方法1:使用df.loc[]索引(最直接)

loc支持直接传入索引数组批量提取指定行的指定列,是Pandas中最常用的向量化索引方式:

# 提取对应索引的HHt列值
h_p = df.loc[ex_arr, "HHt"]

# 若需要纯值数组(对应循环逐个取出的结果)
values = h_p.values  # 输出 array([1, 2, 5])
# 或转为列表
values_list = h_p.tolist()  # 输出 [1, 2, 5]

运行后h_p会返回一个Series:

索引
2643    1
2644    2
2647    5
Name: HHt, dtype: int64

方法2:使用df.reindex()

通过reindex重新对齐DataFrame索引,再提取HHt列:

h_p = df.reindex(ex_arr)["HHt"]

效果和loc一致,适合需要先对齐索引再取值的场景。

方法3:使用Series.take()结合索引位置

先获取目标索引在DataFrame索引中的位置,再用take批量取值:

# 获取目标索引对应的位置索引
pos_indices = df.index.get_indexer(ex_arr)
# 提取HHt列对应位置的值
h_p = df["HHt"].take(pos_indices)

这种方式适合需要基于位置而非索引标签操作的场景。


内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 10:01:14