Python 基于近似匹配或公式查找熊猫中的重复行

Python 基于近似匹配或公式查找熊猫中的重复行,python,pandas,Python,Pandas,我有一个熊猫数据框 import pandas as pd df = pd.DataFrame({"x" : [1.,1.,2.,3.,3.01,4.,5.],"y":[10.,11.,12.,12.95,13.0,11.,10.], "name":["0ndx","1ndx","2ndx","3ndx","4ndx","5ndx","6ndx"]}) print(df.duplicated(subset=["x","y"])) x

我有一个熊猫数据框

import pandas as pd
df = pd.DataFrame({"x" : [1.,1.,2.,3.,3.01,4.,5.],"y":[10.,11.,12.,12.95,13.0,11.,10.],
                   "name":["0ndx","1ndx","2ndx","3ndx","4ndx","5ndx","6ndx"]})
print(df.duplicated(subset=["x","y"]))

      x      y  name
0  1.00  10.00  0ndx
1  1.00  11.00  1ndx
2  2.00  12.00  2ndx
3  3.00  12.95  3ndx
4  3.01  13.00  4ndx
5  4.00  11.00  5ndx
6  5.00  10.00  6ndx
我希望使用一个基于距离的公式(公差为0.1)查找重复的行(在本例中为第3行和第4行)。如果一行与另一行的距离在0.1以内(或者,如果x和y都在公差范围内,则等效),则该行将被复制。正如一位评论者所指出的,这可能导致一组值的分布超过0.1,因为1.1接近1.18接近1.22。这可能会影响您可以执行的某些操作,但我仍然会将另一行的公差范围内的任何行定义为复制行

这是一个玩具问题,我有一个中等大小的问题,但预见到问题的大小足够大(250000行),外部产品可能是昂贵的建设


有办法做到这一点吗

您可以与pandas.shift进行比较

然后,如果您想将每一行与前一行进行比较,并在它们彼此之间的某个阈值内创建一列,假设为0.1,则如下所示:

eps = 0.1
df['duplicated'] = 0
df.sort_values(by=['x'],inplace=True)
df.loc[abs(df['x'] - df['x'].shift()) <= eps,'duplicated'] = 1
eps=0.1
df['duplicated']=0
df.sort_值(by=['x'],inplace=True)

df.loc[abs(df['x']-df['x'].shift())这类问题一直困扰着我。你如何处理
12.95,13.00,13.05,13.10
?它们是否与阈值
0.1
重复。注意到
13.10-12.95>threshold
@Quang Hoang你提出了一个很好的观点,值得编辑这个问题,我也有。我喜欢这个技巧,所以投赞成票。但是,我没有澄清,我所说的“距离”是指x和y的距离(欧几里德距离或两者都在公差范围内)。我认为解决方案不够普遍,无法处理这个问题。