applymap 中的 Python 引用行

标签 python python-2.7 pandas numpy

我有 2 个数据框

>>> x
   0  1  2  3
0  1  2  3  4
1  2  3  4  1
2  3  4  1  2
3  4  1  2  3
>>> y
   0  1  2  3
0  1  2  3  0
1  2  3  0  1
2  3  0  1  2
3  0  1  2  3

我的目标是根据以下规则映射 4x4 数据帧 z: 对于 z 中的每个元素,在 x 中找到一个元素,使得 x 中的行与 z 中的行匹配 x 中的列名称/值与 y 中相同位置的单元格的值相匹配

例如,对于 z 中的 [0,0] 单元格,行应为 0,列应为 1,因为 y[0,0]=1。因此,z[0,0]=x[0,1]=2。

类似地,对于 z 中的 [2,2] 单元格,行应为 2,列应为 1,因为 y[2,2]=1。因此,z[2,2]=x[2,1]=4。

我可以使用以下代码引用正确的列:

>>> z = y.applymap(lambda row: x.ix[1,row])
>>> z
   1  2  3  4
0  3  4  1  2
1  4  1  2  3
2  1  2  3  4
3  2  3  4  1

但是,我无法引用正确的行,正如您在前面的示例中看到的那样,我将该行硬编码为 1。我的问题是如何在 applymap 函数中获取引用同一行位置的代码而不是仅输入参数的值?

编辑:根据下面的评论,我正在寻找 z[i,j]=x[i,y[i,j]]

最佳答案

使用 Numpy 的 advanced-indexing ,我们可以表示 z[i,j]=x[i,y[i,j]],就像这样 -

pd.DataFrame(x.values[np.arange(y.shape[0])[:,None], y])

示例输出 -

In [47]: pd.DataFrame(x.values[np.arange(y.shape[0])[:,None], y])
Out[47]: 
   0  1  2  3
0  2  3  4  1
1  4  1  2  3
2  2  3  4  1
3  4  1  2  3

关于applymap 中的 Python 引用行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43685021/

相关文章:

python - 在Python中为大型数据集本地化时间的快速方法?

python - 多个连接按钮 GUI PyQt5

python - 在 C 中使用 Python 日志记录模块

python - 如何使用 lxml 创建文档的子集?

python - 安装 django-tracking 时遇到错误

python - Matplotlib gridspec - 将另一个三次图放置在几个子图旁边

python - 通过 SSH 运行和安装脚本缺少的模块

python - pyarrow.ParquetDataset > 分区列的架构

python - 将 lambda 函数应用于时间戳以调整无意义的偏移量

python - 相关热图在 Python 中将值转换为 nan