使用 Python 输出重复值 ID 和非重复值的列表

Output a list of duplicate values ID's and non duplicate values using Python

我在 csv 文件中保存了一个巨大的数据集,该文件包含 excel 数据中的 2 列,我需要打印出其中的行 ID 具有相同的 结果(无论数字的顺序如何)和另一个不相同的 结果列表。有些单元格中有超过 2 个整数。我正在尝试使用 Python 来执行此操作,我也四处阅读,熊猫似乎是前进的方向。请注意,我是 Python 的新手,似乎找不到一个简单的脚本来执行此操作(只有删除重复项的脚本)。

所以例如所需的输出会给我

Duplicated Row ID's: 1, 3.

Unique Row ID's: 2, 4.

 A        B            C
ID      Col1         Col2
-----------------------------
1    ["1", "3"]   ["3", "1"]        
2    ["1", "2"]   ["9", "2"]
3    ["8", "0"]   ["0", "8"]
4    ["3", "7"]   ["1", "3"]

如有必要,首先将字符串 repr 转换为列表:

import ast

df['ColA'] = df['ColA'].apply(ast.literal_eval)
df['ColB'] = df['ColB'].apply(ast.literal_eval)

然后对两个列列表进行排序并按 Series.eq, last filter by DataFrame.loc with boolean indexing 进行比较,~ 用于反转掩码:

m = df['ColA'].apply(sorted).eq(df['ColB'].apply(sorted))
dup = df.loc[m, 'ID']
print (dup)
0    1
2    3
Name: ID, dtype: int64

un = df.loc[~m, 'ID']
print (un)
1    2
3    4
Name: ID, dtype: int64

为了提高性能,可以将列表转换为 DataFrame 并进行比较,只需要两列和所有行中的列表长度相同:

df1 = pd.DataFrame(np.sort(df['ColA'].tolist(), axis=1), index=df.index)
df2 = pd.DataFrame(np.sort(df['ColB'].tolist(), axis=1), index=df.index)
print (df1)
   0  1
0  1  3
1  1  2
2  0  8
3  3  7

m = df1.eq(df2).all(axis=1)
print (m)
0     True
1    False
2     True
3    False
dtype: bool