我有两个XYZ格式的坐标Pandas Dataframe 。其中一个包含应该在另一个中被屏蔽的点,但是值彼此稍微偏移,这意味着不可能与drop_duplicates直接匹配。我的想法是将值四舍五入到最接近的有效数字,但这也不总是有效,因为如果某些值被四舍五入到不同的数字,它们将不匹配,也不会被删除。例如,如果一个点位于x = 149,而另一个点位于x = 151,则将它们四舍五入到最接近的百位会得到不同的值。我的代码看起来像这样:
import pandas as pd
import numpy as np
df_test_1 = pd.DataFrame(np.array([[123, 449, 756.102], [406, 523, 543.089], [140, 856, 657.24], [151, 242, 124.42]]), columns = ['x', 'y', 'z'])
df_test_2 = pd.DataFrame(np.array([[123, 451, 756.099], [404, 521, 543.090], [139, 859, 657.23], [633, 176, 875.76]]), columns = ['x', 'y', 'z'])
df_test_3 = pd.concat([df_test_1, df_test_2])
df_test_3['xr'] = df_test_3.x.round(-2)
df_test_3['yr'] = df_test_3.y.round(-2)
df_test_3['zr'] = df_test_3.z.round(1)
df_test_3 = df_test_3.drop_duplicates(subset=['xr', 'yr', 'zr'], keep=False)
如果列'xr'和'yr'重复+-100,而'zr'重复+-0.1,我希望删除重复项。例如,如果两个坐标四舍五入为(100,300,756.2)和(200,400,756.1),则应将其视为重复,并应将其删除。任何想法都很感激,谢谢!
2条答案
按热度按时间idv4meu81#
你可以numpy广播:
输出:
评论@James
这将删除left vs right和right vs left,但不会删除left vs left或right vs right中的重复项。
在这种情况下:
k97glaaz2#
要在阈值内对数据框进行重复数据消除,您需要计算每列中每个值之间的差异,并查看这些值是否在阈值差异范围内。这是针对任何 Dataframe 的通用解决方案。