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