匹配数据帧值



我正在进行一个项目,该项目要求我基于X和Y两个单独的列匹配两个数据帧。

例如

df1=

|  X  |  Y  | AGE |
|:--- |:---:|----:|
| 20  | 15  | 25  |
| 10  | 05  | 29  |
| 15  | 00  | 21  |
| 20  | 20  | 32  |
| 00  | 15  | 19  |

df2=

|  X  |  Y  | AGE |
|:--- |:---:|----:|
| 00  | 00  | []  |
| 00  | 05  | []  |
| 00  | 10  | []  |
| 00  | 15  | []  |
| 00  | 20  | []  |
| 05  | 00  | []  |
| 05  | 05  | []  |
| 05  | 10  | []  |
| 05  | 15  | []  |
| 05  | 20  | []  |
| 10  | 00  | []  |
| 10  | 05  | []  |
| 10  | 10  | []  |
| 10  | 15  | []  |
| 10  | 20  | []  |
| 15  | 00  | []  |
| 15  | 05  | []  |
| 15  | 10  | []  |
| 15  | 15  | []  |
| 15  | 20  | []  |
| 20  | 00  | []  |
| 20  | 05  | []  |
| 20  | 10  | []  |
| 20  | 15  | []  |
| 20  | 20  | []  |

目标是对df1进行排序,在df2中找到具有匹配坐标的行,然后将df1中的AGE值存储在df2的AGE列表中。到目前为止,我的代码是:

for n in df1:
if int(df1["X"].values[n]) == int(df2["X"].values[n]):
for m in df1:
if int(df1["Y"].values[m]) == int(df2["Y"].values[m]):
df2['AGE'].push(df1['AGE'])

预期输出为:

df2=

|  X  |  Y  | AGE |
|:--- |:---:|----:|
| 00  | 00  | []  |
| 00  | 05  | []  |
| 00  | 10  | []  |
| 00  | 15  |[19] |
| 00  | 20  | []  |
| 05  | 00  | []  |
| 05  | 05  | []  |
| 05  | 10  | []  |
| 05  | 15  | []  |
| 05  | 20  | []  |
| 10  | 00  | []  |
| 10  | 05  |[29] |
| 10  | 10  | []  |
| 10  | 15  | []  |
| 10  | 20  | []  |
| 15  | 00  |[21] |
| 15  | 05  | []  |
| 15  | 10  | []  |
| 15  | 15  | []  |
| 15  | 20  | []  |
| 20  | 00  | []  |
| 20  | 05  | []  |
| 20  | 10  | []  |
| 20  | 15  |[25] |
| 20  | 20  |[32] |

您可以执行匹配X&Y基于CCD_ 1。我刚刚读到你需要两列X&Y为整数。不确定我是否理解保留原始X&Y值到"0";绘制它们的图形";。这里有一种可能的方法:

for col in ['X', 'Y']:
df1[col+'1'] = df1[col].astype('int')
df2[col+'1'] = df2[col].astype('int')
print(pd.merge(df2, df1[['AGE', 'X1', 'Y1']], how='left', on=['X1', 'Y1']))

输出:

X   Y  X1  Y1  AGE
0   00  00   0   0  NaN
1   00  05   0   5  NaN
2   00  10   0  10  NaN
3   00  15   0  15   19
4   00  20   0  20  NaN
5   05  00   5   0  NaN
6   05  05   5   5  NaN
7   05  10   5  10  NaN
8   05  15   5  15  NaN
9   05  20   5  20  NaN
10  10  00  10   0  NaN
11  10  05  10   5   29
12  10  10  10  10  NaN
13  10  15  10  15  NaN
14  10  20  10  20  NaN
15  15  00  15   0   21
16  15  05  15   5  NaN
17  15  10  15  10  NaN
18  15  15  15  15  NaN
19  15  20  15  20  NaN
20  20  00  20   0  NaN
21  20  05  20   5  NaN
22  20  10  20  10  NaN
23  20  15  20  15   25
24  20  20  20  20   32

最新更新