Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输出重复值ID';使用Python的s和非重复值_Python_Pandas_Opencsv - Fatal编程技术网

输出重复值ID';使用Python的s和非重复值

输出重复值ID';使用Python的s和非重复值,python,pandas,opencsv,Python,Pandas,Opencsv,我有一个巨大的数据集保存在一个csv文件中,该文件在excel中保存了两列数据,我需要打印出行ID,其中哪些具有相同的结果(无论数字的顺序如何),以及另一个不相同的结果列表。有些单元格中有两个以上的整数。我正在尝试使用Python来实现这一点,我也读过很多书,Panda似乎是前进的方向。请注意,我是Python新手,似乎找不到一个简单的脚本来实现这一点(只有那些删除重复项的脚本) 因此,例如,所需的输出将为我提供 重复的行ID:1、3 唯一行ID:2,4 A B

我有一个巨大的数据集保存在一个csv文件中,该文件在excel中保存了两列数据,我需要打印出行ID,其中哪些具有相同的结果(无论数字的顺序如何),以及另一个不相同的结果列表。有些单元格中有两个以上的整数。我正在尝试使用Python来实现这一点,我也读过很多书,Panda似乎是前进的方向。请注意,我是Python新手,似乎找不到一个简单的脚本来实现这一点(只有那些删除重复项的脚本)

因此,例如,所需的输出将为我提供

重复的行ID:1、3

唯一行ID: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"]

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

import ast

df['ColA'] = df['ColA'].apply(ast.literal_eval)
df['ColB'] = df['ColB'].apply(ast.literal_eval)
然后对两列列表进行排序并比较,最后一个过滤方式为,
~
用于反转掩码:

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
为了提高性能,可以将列表转换为数据帧并进行比较,只需在两列和所有行中使用相同长度的列表:

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

不要共享屏幕截图,而是以文本的形式向我们共享数据框。列中是否有
多索引
?什么是
print(df.columns)
?@T.C-使用
df=pd.read\u csv(file)
@T.C-你能给我发送聊天室的链接吗?我可以问一下,我不一定要硬编码代码中的任何整数吗?因为我拥有的实际数据集有数百万行,那么上面的内容还可以吗?@T.C-嗯,在
B、C
列中是列表吗?如果是,所有列表在所有数据帧行的两列中都具有相同的长度
2
?是否可以轻松更改此脚本以仅在两列中显示精确匹配?i、 e.数字的顺序是否完全相同?