pandas 删除数据框中两列中出现的重复值

ovfsdjhp  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(150)

我有一个类似的表:

index   name_1     path1        name_2       path2
0       Roy       path/to/Roy     Anne      path/to/Anne
1       Anne      path/to/Anne     Roy      path/to/Roy 
2       Hari      path/to/Hari    Wili      path/to/Wili
3       Wili      path/to/Wili    Hari      path/to/Hari
4       Miko      path/to/miko     Lin      path/to/lin
5       Miko      path/to/miko     Dan      path/to/dan
6       Lin       path/to/lin     Miko      path/to/miko
7       Lin       path/to/lin     Dan       path/to/dan
8       Dan       path/to/dan     Miko      path/to/miko
9       Dan       path/to/dan     Lin       path/to/lin
...

如你所见,表格显示了实体之间的关系-
国王和安妮在一起
威利和哈里
林和丹还有美子。
该表实际上显示了重叠数据,这意味着,例如,Hari和wili具有相同的文档,我想删除其中一个,以避免重复文件。为了做到这一点,我想创建一个新的表,只有一个名称的关系,所以我可以稍后创建路径列表删除。
结果表如下所示:

index   name_1     path1        name_2       path2
0       Roy       path/to/Roy      Anne      path/to/Anne
1       Hari      path/to/Hari     Wili      path/to/Wili
2       Miko      path/to/miko     Lin       path/to/lin
3       Miko      path/to/miko     Dan       path/to/dan

这个想法是,我将使用“path 2”的值来删除具有此路径的文件,并且仍然具有path 1中的文件。因此,这一行:

4       Lin       path/to/lin    Dan       path/to/dan

因为它将被删除使用Miko...有什么办法吗:)
编辑:
我已经尝试过基于t his answer:

df_2= df[~pd.DataFrame(np.sort(df.values,axis=1)).duplicated()]

的确,我在dataframe中得到的行数更少(它有695行,我现在得到了402行),但是,我仍然有这样的第一行:

index   name_1     path1        name_2       path2
0       Roy       path/to/Roy     Anne      path/to/Anne
1       Anne      path/to/Anne     Roy      path/to/Roy 
...

也就是说我还是会遇到同样的问题

6vl6ewon

6vl6ewon1#

您可以使用frozenset来检测重复项:

out = (df[~df[['name_1', 'name_2']].agg(frozenset, axis=1).duplicated()]
           .loc[lambda x: ~x['path2'].isin(x['path1'])])

# OR

out = (df[~pd.DataFrame(np.sort(df.values,axis=1)).duplicated()]
           .query('~path1.isin(path2)'))

输出:

>>> out
  name_1         path1 name_2         path2
0    Roy   path/to/Roy   Anne  path/to/Anne
2   Hari  path/to/Hari   Wili  path/to/Wili
5   Miko  path/to/miko    Dan   path/to/dan
7    Lin   path/to/lin    Dan   path/to/dan

相关问题