【问题标题】:How to apply function to pandas matrix that knows the location of each cell?如何将函数应用于知道每个单元格位置的熊猫矩阵?
【发布时间】:2019-09-27 02:40:42
【问题描述】:

我需要根据 pandas 数据框中的每个单元格获取信息,这取决于该单元格在矩阵中的位置。这会从与 1 个单元格相邻的 3 个单元格收集分数。

scores.append(numpy.array([df.iloc[a-1, b-1], df.iloc[a, b-1], df.iloc[a-1, b]]))

我想在每个单元格的整个矩阵中运行它。为此,我需要获取行名 (b)、列名 (a),它们是代表该单元格位置的数字。如何在applyapplymap 中访问此信息?我试过访问x.namex.index,但它不返回奇异值。

【问题讨论】:

  • 您能否添加一些我们可以复制/粘贴的示例数据以及预期的输出?

标签: python-3.x pandas numpy apply


【解决方案1】:

我认为不可能从applymap 中获取元素位置。

但是,您可以使用 shift 来获取以前的行/列:

import pandas as pd, numpy as np
df = pd.DataFrame(np.array(range(25)).reshape(5,5) , columns = list('abcde'))
print(df)
#    a   b   c   d   e
#0   0   1   2   3   4
#1   5   6   7   8   9
#2  10  11  12  13  14
#3  15  16  17  18  19
#4  20  21  22  23  24

stack = np.dstack((df.shift().shift(axis=1), df.shift(axis=1), df.shift()))
pd.DataFrame([list(x) for x in stack], columns=df.columns.values)

结果:

                  a                   b                   c                   d                   e
0   [nan, nan, nan]     [nan, 0.0, nan]     [nan, 1.0, nan]     [nan, 2.0, nan]     [nan, 3.0, nan]
1   [nan, nan, 0.0]     [0.0, 5.0, 1.0]     [1.0, 6.0, 2.0]     [2.0, 7.0, 3.0]     [3.0, 8.0, 4.0]
2   [nan, nan, 5.0]    [5.0, 10.0, 6.0]    [6.0, 11.0, 7.0]    [7.0, 12.0, 8.0]    [8.0, 13.0, 9.0]
3  [nan, nan, 10.0]  [10.0, 15.0, 11.0]  [11.0, 16.0, 12.0]  [12.0, 17.0, 13.0]  [13.0, 18.0, 14.0]
4  [nan, nan, 15.0]  [15.0, 20.0, 16.0]  [16.0, 21.0, 17.0]  [17.0, 22.0, 18.0]  [18.0, 23.0, 19.0]

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    相关资源
    最近更新 更多