我有两个数据帧列,如下所示:
col1 col2
0 A2 B8
1 B8 C3
2 D2 A2
我想识别col1中不在col2中的所有值,反之亦然。在上面的例子中,输出将是:
C3, D2
两个列表都不是唯一的。
答案 0 :(得分:0)
为什么不将每列转换为set
并计算对称差异?
import pandas as pd
df = pd.DataFrame({'col1': ['A2', 'B8', 'D2'],
'col2': ['B8', 'C3', 'A2']})
print set(df['col1']).symmetric_difference(set(df['col2']))
打印:
set(['C3', 'D2'])
编辑:
如果你想跟踪哪些元素来自哪里,你可以调整它并创建一个新的字典,如下所示:
col1 = set(df['col1'])
col2 = set(df['col2'])
exclusive_items = {'col1': [x for x in col1 if x not in col2],
'col2': [x for x in col2 if x not in col1]}
print exclusive_items
exclusive_items
中的每个键都包含该列唯一的条目作为其值。这打印:
{'col2': ['C3'], 'col1': ['D2']}
事实上,正如我们设定的那样,我们可以将其简化为:
exclusive_items = {'col1': col1-col2,
'col2': col2-col1}
答案 1 :(得分:0)
import pandas as pd
df = pd.DataFrame({'col1': ['A2', 'B8', 'D2'],
'col2': ['B8', 'C3', 'A2']})
in_col1_not_in_col2 = list(set(df['col1'])-(set(df['col2'])))
in_col2_not_in_col1 = list(set(df['col2'])-(set(df['col1'])))
print('in_col1_not_in_col2: ')
print(in_col1_not_in_col2)
print('in_col2_not_in_col1: ')
print(in_col2_not_in_col1)
in_col1_not_in_col2: ['D2']
in_col2_not_in_col1: [ 'C3']