gpt4 book ai didi

applymap 中的 Python 引用行

转载 作者:行者123 更新时间:2023-12-01 03:02:28 28 4
gpt4 key购买 nike

我有 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com