将一个数据框中的坐标与另一个数据框中的坐标进行比较3 列乘 3 列

问题描述

我有两个熊猫数据框。它们看起来像这样:

df1:

x  y  z  label
1  2 -3   A
4  5 -9   B
3  4  6   C
-1 0  3   no_label
5  6  7   no_label

df2:

x1 y1 z1  label1
1  2 -4   23
2  4 10   56
5  6  6   56
-1 0  3   75
 

目标是比较行中的坐标(一个 df 中的三列,另一个 df 中的三列)。

问题 1:它们在不同的行中可能相同。

问题 2:它们是由不同的算法计算的,因此坐标可能存在 +/- 1 值的差异。

问题 3:数据帧大小不同。

目标是比较并在 df1 中存在 'no_label' 且坐标与 df2 匹配的位置将来自坐标匹配行的 df2 的值。 输出示例:

x  y  z  label
1  2 -3   A
4  5 -9   B
3  4  6   C
-1 0  3   75
5  6  7   56

我试图将它们转换为列表,但我卡在了中间... 有人对如何执行此操作有任何想法吗?

解决方法

我不认为有一个单行解决方案,您只需要遍历数据帧并进行比较:

for i in df1.index:
   if df1.at[i,'label'] == 'no_label':
      for j in df2.index:
         if df2.at[j,'x1']-1 <= df1.at[i,'x'] <= df2.at[j,'x1']+1:
            if df2.at[j,'y1']-1 <= df1.at[i,'y'] <= df2.at[j,'y1']+1:
               if df2.at[j,'z1']-1 <= df1.at[i,'z'] <= df2.at[j,'z1']+1:
                  df1.loc[i,'label'] = df2.at[j,'label1']
                  continue
print(df1)

没有测试代码,但我希望你能明白!