检测混合变量类型的近乎重复行

2024-09-23 00:13:48 发布

您现在位置:Python中文网/ 问答频道 /正文

比如说,我试图根据姓名、年龄和国家在这个集合中找到重复的值

NAME AGE COUNTRY PROFESSION
'Fred' 23 America Banker
'Paula' 78 Germany Retired
'Fred' 23 America Banker
'Fred' 22 America Student
'Fred' 23 Brazil Police Officer
'Bingo' 36 New Zealand Money

要查找我使用的精确副本,请执行以下操作:

dupDF = df[df.duplicated(['NAME', 'AGE', 'COUNTRY'], keep=False)]

这将给我:

NAME AGE COUNTRY PROFESSION
'Fred' 23 America Banker
'Fred' 23 America Banker

我真正想要的是匹配姓名、年龄(+/-1)和国家,以便返回:

NAME AGE COUNTRY PROFESSION
'Fred' 23 America Banker
'Fred' 23 America Banker
'Fred' 22 America Student

我尝试使用这里提供的解决方案:Detecting almost duplicate rows

但是,我正在努力调整解决方案以接受非整数值

我还尝试创建一个数组(如:https://stackoverflow.com/a/43160595/10816095),其中包含年龄+/-1,希望使用它来匹配,但我似乎无法将其附加到数据帧

我该怎么做


Tags: namedfage国家fred解决方案countrystudent
1条回答
网友
1楼 · 发布于 2024-09-23 00:13:48

所有3列都使用^{},列表中的最后一列是整数列,然后按具有相同值的列和具有回补forts值的^{}分组,最后按^{}比较<,按^{}排序索引并传递给^{}

mask = (df.sort_values(['NAME','COUNTRY','AGE'])
          .groupby(['NAME','COUNTRY'])['AGE'].apply(lambda x: x.diff().bfill())
          .lt(2)
          .sort_index())

df = df[mask]
print (df)
     NAME  AGE  COUNTRY PROFESSION
0  'Fred'   23  America     Banker
2  'Fred'   23  America     Banker
3  'Fred'   22  America    Student

相关问题 更多 >