问题描述
我有两个熊猫数据框。它们看起来像这样:
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)
没有测试代码,但我希望你能明白!