python - 制作一个二维字符串矩阵来匹配网格坐标

标签 python arrays pandas numpy

我有一个结构化网格。网格具有坐标 (X,Y),但每个网格单元还分配有一个字母数字代码。 网格 X 和 Y 坐标通过网格生成为 2D 数组。

带有字母数字代码的系列看起来像这样

Index   Code
0       aa1
1       aa2
2       aa3
3       aa4
4       bb1
5       bb2
6       bb3
7       bb4
8       ab1
9       ab2
10      ab3
11      ab4
....    .....

我的想法是制作一个字母数字代码的二维数组,以便每个元素的行和列索引将对应于 X 和 Y 二维数组的相同行和列索引。

字母数字值位于与 X 和 Y 二维数组大小相同的 pandas 系列中。我需要对每个第 n 个元素的字母数字值进行切片(因此以 0 到 2 为例,并将其作为第一行)并形成 2D 数组的第一行,并继续像这样填充其余部分。

最后我想要这个:

0     0           1         2
1     aa1         aa2       aa3        
2     aa4         bb1       bb2
3     bb3         bb4       ab1
4     ab2         ab3       ab4
.....................

关于如何进行这项工作有什么建议吗? 我设法做到了这一点:

interval = 2
alphanum = [array[i:i+interval] for i in range(len(df.series))[::interval]]

这给了我一个系列列表而不是二维数组

最佳答案

您可以使用numpy.array_split甚至numpy.split将数组拆分为多个子数组。但如果无法均分,前者不会引发异常。

In [2]: np.array(np.array_split(df['Code'].values, 4))
Out[2]: 
array([['aa1', 'aa2', 'aa3'],
       ['aa4', 'bb1', 'bb2'],
       ['bb3', 'bb4', 'ab1'],
       ['ab2', 'ab3', 'ab4']], dtype=object)

编辑:

你的意思是这样吗?

In [5]: np.array(np.array_split(df.as_matrix(columns=['Code']), 4))
Out[5]: 
array([[['aa1'],
        ['aa2'],
        ['aa3']],

       [['aa4'],
        ['bb1'],
        ['bb2']],

       [['bb3'],
        ['bb4'],
        ['ab1']],

       [['ab2'],
        ['ab3'],
        ['ab4']]], dtype=object)

关于python - 制作一个二维字符串矩阵来匹配网格坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696546/

相关文章:

python - 按列分组并将另一列的值分散到其他列中

java - 在方法中迭代数组 (Android)

php - 关联数组 - 动态创建 (CodeIgniter)

python - 如何将标量广播到 Pandas 数据框中的过滤列

python - 合并 Pandas 中的公共(public)列值会产生不正确的数据框

python - Pandas 前一组最小/最大

python - Skype4Py:无法授权传入的好友请求

在 try block 中引发错误的 pythonic 方式

python - 使用 python 和 postfix 发送符合 VERP 标准的电子邮件

C#,在函数中返回一个数组