我有一个数据框,其中列出了列值,并且想要查找两列之间的差异。
data={'NAME':['JOHN','MARY','CHARLIE'],
'A':[[1,2,3],[2,3,4],[3,4,5]],
'B':[[2,3,4],[3,4,5],[4,5,6]]}
df=pd.DataFrame(data)
为什么不起作用?
df = df.assign(X1 = lambda x: [y for y in x['A'] if y not in x['B']])
我收到错误:
类型错误:不可散列的类型:“列表”
我不明白为什么?
有两个问题,您不能使用
lst in Series
,因为列表不可散列,并且您应该使用带有 None 的三元:
df.assign(X1 = lambda x: [y if y not in x['B'].tolist() else None
for y in x['A']])
输出:
NAME A B X1
0 JOHN [1, 2, 3] [2, 3, 4] [1, 2, 3]
1 MARY [2, 3, 4] [3, 4, 5] None
2 CHARLIE [3, 4, 5] [4, 5, 6] None