Pandas - 如何使用另一个 DF 的值从没有任何“键”的大 DF 中提取值?

问题描述

我有一个大矩阵作为pandas DF,没有任何“键”,但顶部有普通数字。一个较小的版本只是为了演示这里的问题,就像这样的输入:

M=pd.DataFrame(np.random.rand(4,5))

我想要完成的是使用另一个给定的 DF 作为具有这样结构的参考

N=pd.DataFrame({'A':[2,2,2],'B':[2,3,4]})

...从大 DF 中提取值,而“A”的值对应于 ROW 编号,而“B”值对应于 COLUMN 编号大 DF 使预期的输出看起来像这样:

Large DF
          0         1         2         3         4
0  0.766275  0.910825  0.378541  0.775416  0.639854
1  0.505877  0.992284  0.720390  0.181921  0.501062
2  0.439243  0.416820  0.285719  0.100537  0.429576
3  0.243298  0.560427  0.162422  0.631224  0.033927

Small DF
   A  B
0  2  2
1  2  3
2  2  4

Expected Output:
   A  B extracted values 
0  2  2 0.285719
1  2  3 0.100537
2  2  4 0.429576

到目前为止,我已经尝试过类似这样的不同版本

N['extracted'] = M.iloc[N['A'].astype(int):,N['B'].astype(int)]

..但它一直失败并显示错误

TypeError: cannot do positional indexing on RangeIndex with these indexers
[0    2
 1    2
 2    2

哪种方法最好? 通过将 DF 转换为 numpy 数组来完成这项工作是否更好?

感谢您的帮助!

解决方法

我认为您想使用应用功能。这将逐行浏览您的数据集。

N['extracted'] = N.apply(lambda row: M.iloc[row['A'],row['B']],axis=1)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...