2 回答

TA貢獻1815條經驗 獲得超13個贊
您可以ndix_unique
從鏈接的答案中使用矢量化方法。然后根據結果構造一個數據框,explode
坐標(x,y)
列表并分配回去:
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
....

TA貢獻1799條經驗 獲得超9個贊
這是一種直接的方法:
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
添加回答
舉報