如何根据 single/multiple 列值在具有给定容差的数据框中查找重复行?

How to find duplicate rows in a dataframe with given tolerance based on a single/multiple column value?

是通过比较基于列值的两个数据帧来列出重复值的建议解决方案。如何通过考虑给定的公差并将其列在新数据框中来做同样的事情来查找数据框本身中包含的重复行?

df
         YearDeci  Year  Month  Day  Hour  ...  Seconds   Mb     Lat     Lon  
0     1669.510  1669      6    4     0  ...        0  NaN  33.400  73.200    
1     1720.535  1720      7   15     0  ...        0  NaN  28.700  77.200    
2     1780.000  1780      0    0     0  ...        0  NaN  35.000  77.000    
3     1669.511  1669      6    4     0  ...        0  NaN  33.400  73.200    
4     1803.665  1803      9    1     0  ...        0  NaN  30.300  78.800
5     1803.388  1803      5   22    15  ...        0  NaN  30.600  78.600.

如果我们根据 YearDeci 查找重复行,容差级别为 0.002

expected output

1669.510  1669      6    4     0  ...        0  NaN  33.400  73.200   3     
1669.511  1669      6    4     0  ...        0  NaN  33.400  73.200

或者只是它的索引

index1 index2
0      3
  1. 首先按要查找的行在彼此 0.002 范围内的列对数据框进行排序。
  2. 然后,您可以使用 .diff() 查找行之间的差异,如果 .diff() is < 0.002 则进行筛选。您还必须使用 .shift(-1):
  3. 获取其上方的另一行

df = df.sort_values('YearDeci')
s = df['YearDeci'].diff() < 0.002
df[s | s.shift(-1)]
Out[1]: 
   YearDeci  Year  Month  Day  Hour  ...  Seconds  Mb   Lat     Lon
0  1669.510  1669      6    4     0  ...        0 NaN  33.4  73.200
3  1669.511  1669      6    4     0  ...        0 NaN  33.4  73.200

获取索引值:

df[(s | s.shift(-1))].index.tolist()
# OR [*df[(s | s.shift(-1))].index]

[0, 3]