如何在熊猫数据框中查找重复项

时间:2019-06-07 11:39:08

标签: python pandas

我想读取其中包含一些.csv文件的文件夹,并查找重复的坐标。 .csv如下所示:

0 0 0 1 1 
0 1 2 1 1 
0 0 0 1 2
...

这里将是第0行和第2行重复,因为前三列(坐标)相同。

我认为也许在比较之前对数据帧进行排序会加快代码的速度。但是我不确定如何在python中正确排序(我会按照第一列对其进行排序。然后,对于第一列中相同的每个元素,第二列中的每个元素都相同,第三列中的元素相同。因此,数据帧:

0 1 1 1 1
0 1 0 1 2
2 0 1 0 0
0 0 0 1 1
would look like this: 
0 0 0 1 1
0 1 0 1 2
0 1 1 1 1
2 0 1 0 0

到目前为止,我的代码如下:

import pandas as pd
import glob
import numpy as np
from tkinter import filedialog

path = filedialog.askdirectory(title="Select Coordinate File")
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)
# Sort frame
# Compare rows

1 个答案:

答案 0 :(得分:1)

您可以使用groupby。喜欢:

deduplicated_df= df.groupby(['NameCol1', 'NameCol2', 'NameCol3']).aggregate('first')

在这种情况下,三列的每种组合都将获得一行。其他列值取自前三行中具有相同值组合的第一条记录。

这使前3列索引列。如果您需要将它们作为常规列,只需执行以下操作:

deduplicated_df.reset_index(inplace=True)

哦,我重读了。不确定,如果您只是想消除重复项(上述方法就是这样做的),或者打印重复的坐标。在后一种情况下,您可以执行与上述类似的操作。我猜你只需要坐标,对吧?

在这种情况下,您可以再次分组并产生一个计数列(“ NameCol4”可以是df中任何现有的列),然后选择计数大于1的所有行。

deduplicated_df= df.groupby(['NameCol1', 'NameCol2', 'NameCol3']).aggregate({'NameCol4': 'count'})
deduplicated_df.reset_index(inplace=True)
deduplicated_df[deduplicated_df['NameCol4']>1]