Pandas无键大DataFrame如何通过参考DF的行列值提取对应数据
错误原因
你此前的写法报错是因为iloc[行范围, 列范围]的语法仅支持传入单个索引值、连续范围切片、布尔数组三种参数类型,无法直接传入两个Series作为逐行对应的坐标对取值,因此触发类型错误。
最优实现方案
完全不需要额外做格式转换,直接利用Pandas DataFrame底层numpy数组的高级整数索引特性即可实现,属于纯向量化操作,性能最高,尤其适配你提到的大型纯数值矩阵场景:
import pandas as pd import numpy as np # 构造示例数据 M = pd.DataFrame(np.random.rand(4,5)) N = pd.DataFrame({'A':[2,2,2],'B':[2,3,4]}) # 核心赋值逻辑,to_numpy()为pandas官方推荐的取底层数组方法,兼容性优于旧版的.values属性 N['extracted values'] = M.to_numpy()[N['A'], N['B']]
可选实现(仅适合小数据量场景)
如果不想调用底层numpy数组,也可以用逐行apply的方式实现,但该方案本质是循环遍历,数据量越大性能差距越明显,不推荐大型矩阵使用:
N['extracted values'] = N.apply(lambda row: M.iloc[row['A'], row['B']], axis=1)
两种方案输出结果均符合你的预期要求。
内容的提问来源于stack exchange,提问作者cyclomen
相关产品推荐
相关产品推荐

