问题描述
我有带有 x 和 y 坐标的二维数组和数据框 df,我想将二维数组的值映射到新列中数据框中相应的 x
和 y
坐标
数组
data =
array([[0,0],[0,1,0]])
df =
index y x result
0 4 8 NaN
1 8 8 NaN
2 8 4 NaN
3 6 1 NaN
4 5 3 NaN
5 1 5 NaN
6 6 6 NaN
7 6 12 NaN
8 8 3 NaN
9 6 3 NaN
10 5 10 NaN
11 3 6 NaN
12 2 5 NaN
13 2 4 NaN
14 5 7 NaN
15 2 8 NaN
16 1 8 NaN
17 5 9 NaN
18 6 2 NaN
19 4 5 NaN
20 4 10 NaN
21 7 6 NaN
22 2 1 NaN
23 3 10 NaN
24 5 1 NaN
25 8 2 NaN
26 1 4 NaN
27 6 4 NaN
28 1 7 NaN
29 4 11 NaN
30 8 9 NaN
31 6 7 NaN
32 3 7 NaN
33 6 10 NaN
34 1 10 NaN
35 6 11 NaN
36 7 7 NaN
37 3 5 NaN
38 3 11 NaN
39 1 11 NaN
40 6 9 NaN
41 5 8 NaN
42 1 12 NaN
43 3 3 NaN
44 5 12 NaN
45 3 8 NaN
46 6 5 NaN
47 3 12 NaN
48 3 4 NaN
49 5 11 NaN
50 2 9 NaN
51 7 1 NaN
52 7 5 NaN
53 7 10 NaN
54 8 10 NaN
55 2 11 NaN
56 2 12 NaN
57 8 11 NaN
58 7 11 NaN
59 8 7 NaN
60 7 9 NaN
61 4 7 NaN
62 4 12 NaN
63 2 7 NaN
64 1 6 NaN
65 3 9 NaN
66 4 9 NaN
67 4 6 NaN
68 1 2 NaN
69 5 4 NaN
70 8 1 NaN
71 8 5 NaN
72 2 3 NaN
73 5 5 NaN
74 8 6 NaN
75 4 1 NaN
76 1 9 NaN
77 2 6 NaN
78 7 8 NaN
79 4 2 NaN
80 5 2 NaN
81 7 3 NaN
82 2 2 NaN
83 7 4 NaN
84 4 3 NaN
85 3 1 NaN
86 1 1 NaN
87 6 8 NaN
88 1 3 NaN
89 4 4 NaN
90 7 2 NaN
91 5 6 NaN
92 3 2 NaN
93 2 10 NaN
94 7 12 NaN
95 8 12 NaN
for y,x in np.ndindex(data.shape):
for i,j in zip(df.x,df.y):
if (i - 1 == data[x]).all() & ( j - 1 == data[y]).all():
df['result'] == result[x,y]
i-1
和 j-1
已完成,因为 np 数组索引从 0 开始,但在 df 中它从 1 开始
df =
index y x result
0 4 8 0
1 8 8 0
2 8 4 0
3 6 1 0
4 5 3 0
5 1 5 0
6 6 6 0
......
解决方法
代码:
data_df = pd.DataFrame(data)
result = [data_df.loc[row['y']-1,row['x']-1] for index,row in df.iterrows()]
df['result'] = result
print(df)
输出:
x y result
0 4 8 0
1 8 8 0
2 8 4 0
3 6 1 0
4 5 3 0
.. .. .. ...
91 5 6 0
92 3 2 1
93 2 10 1
94 7 12 0
95 8 12 0
,
简单的解决方案是:
df['result'] = [data[coords['y']-1,coords['x']-1] for _,coords in df.iterrows()]
如果您需要效率,请使用 df.itertuples()