问题描述
我有一个大矩阵作为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)