我有一个具有以下结构的 pandas 数据框:
df:
x y z1 z2 z3
1.01 2.01 11.415 12.345 100
1.009 2.009 11.415 12.345 100
1.01 2.05 11.415 12.345 100
Run Code Online (Sandbox Code Playgroud)
x 列和 y 列是用一些噪声测量的。我的工作是对列 z1、z2、z3 的数据帧进行“去重复”,以使 x 列和 y 列中的条目彼此距离不“远”。在上面设计的示例中,前两行(第 1 行和第 2 行)是重复的,z 列中具有相同的条目,并且 x 和 y 合理地“接近”。请注意,第 3 行(最后一行)也具有相同的条目,但其 y 值与其他两行“相距甚远”(2.05 与 2.01)。我有逻辑来确定 x 列和 y 列的什么算作“远”和“近”。
我正在寻找一种干净的方法来做到这一点。我尝试过窗口应用程序并使用分组依据等,但似乎没有什么效果很好。谢谢。
一种方法是创建一个列,标记 x 和 y “足够接近”的行,然后相应地删除重复项。
df['duplicate'] = df[[x, y]].apply(lambda items: 1*(np.abs(items[0]-items[0]) <= 1.0), axis=1)
df_fltr = pd.concat((df[df.duplicate == 1].drop_duplicates(subset=['z1', 'z2', 'z3']),
df[df.duplicate == 0]))
Run Code Online (Sandbox Code Playgroud)
更好(因为它可能更快)您可以使用矢量化方法来创建标签:
df['duplicate'] = ((df.x - df.y).abs() <= 1.0)*1
归档时间: |
|
查看次数: |
2892 次 |
最近记录: |