如何在Python中获取坐标?

2024-09-28 20:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在下面有一个阵列显示

df=np.array([[None, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', None],
 [None, None, None, None, None, None, None, None, None, None, None, None],
 ['E ', 'F ', 'D ', 'F ', 'D ', 'F ', 'D ', 'F ', 'D ', 'F ', 'D ', 'E '],
 ['E ', 'G ', None, 'H ', 'B ', 'H ', None, 'H ', None, 'H ', 'I ', 'E '],
 ['E ', None, 'B ', 'A ', None, 'G ', 'C ', None, 'C ', 'G ', None, 'E '],
 ['E ', 'C ', 'D ', None, 'H ', None, 'I ', 'D ', None, 'J ', 'G ', 'E '],
 ['E ', 'A ', None, 'I ', None, 'A ', 'B ', None, 'G ', 'H ', None, 'E '],
 ['E ', 'F ', 'C ', None, 'I ', None, None, 'F ', None, None, 'J ', 'E '],
 ['E ', 'B ', None, 'D ', None, 'C ', 'B ', None, 'J ', 'J ', None, 'E '],
 ['E ', 'H ', 'C ', None, 'G ', None, 'H ', 'A ', 'C ', None, 'H ', 'E '],
 ['E ', 'C ', None, 'A ', None, 'G ', None, None, 'I ', 'D ', None, 'E '],
 ['E ', None, 'G ', 'F ', 'B ', None, 'I ', None, 'G ', None, 'G ', 'E '],
 ['E ', 'B ', None, 'C ', None, 'H ', None, 'J ', None, 'I ', None, 'E '],
 ['E ', 'C ', 'D ', None, 'F ', 'C ', 'D ', None, 'B ', 'F ', 'G ', 'E ']])

现在我想得到一个新的数据帧或nparray,它包含每个值的坐标。 例如:

id c x y
1  A 1 0
2  B 2 0
...
11 E 0 2  
12 F 1 2
...

如何实现

多谢各位


Tags: 数据noneiddfnparraynparray
2条回答

可以使用链接答案中的^{}作为矢量化方法。然后根据^{}坐标列表的结果构建一个数据帧,并分配回:

vals, ixs = ndix_unique(a)
df = pd.DataFrame({'c':vals, 'xy':ixs}).explode('xy')
x, y = zip(*df.xy.values.tolist())
df = df[['c']].assign(x=x, y=y).reset_index(drop=True)

print(df)
      c    x  y
0     A    0  1
1     A    6  1
2     B    0  2
3     B    8  1
4     B   12  1
5     B    4  2
6     C    5  1
7     C    9  2
....

这是一条直截了当的道路:

import pandas as pd
import numpy as np
data = np.array([[None, 'A', 'B'], ['E', 'A', 'B']])
values = []
for y, row in enumerate(data):
    for x, char in enumerate(row):
        if char is not None:
            values.append({
                "id": 1 + len(values),
                "c": char,
                "x": x,
                "y": y
            })
df = pd.DataFrame(values)
df.set_index('id', inplace=True)
df

输出:

    c   x   y
id          
1   A   1   0
2   B   2   0
3   E   0   1
4   A   1   1
5   B   2   1

相关问题 更多 >