首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于近似匹配或公式在pandas中查找重复行

基于近似匹配或公式在pandas中查找重复行
EN

Stack Overflow用户
提问于 2019-11-27 01:09:08
回答 1查看 212关注 0票数 0

我有一个熊猫数据框

代码语言:javascript
复制
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

我想使用一个基于距离的公式来查找重复的行(在本例中是第3行和第4行),容差为0.1。如果某一行与另一行的距离在0.1范围内(或者,等效地,如果x和y都在公差内),则该行将被复制。正如一位评论者指出的那样,这可能导致超过0.1的价差聚集值,因为1.1接近1.18,接近1.22。这可能会影响您可以做的一些事情,但我仍然会将任何在另一行的容差内的行定义为重复的。

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

有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2019-11-27 01:20:38

您可以与pandas.shift https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shift.html进行比较。

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

代码语言:javascript
复制
eps = 0.1
df['duplicated'] = 0
df.sort_values(by=['x'],inplace=True)
df.loc[abs(df['x'] - df['x'].shift()) <= eps,'duplicated'] = 1

则带有1的列将是在您的阈值内重复的列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59056074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档