我正在尝试在数据框中创建一个新列,其中包含两个集合的交集(每个集合包含在两个单独的列中)。列本身包含集合。
dfc['INTERSECTION'] = set(dfc.TABS1).intersection(set(dfc.TABS2))
我收到一个Value错误。我能够做到
dfc['LEFT'] = set(dfc.TABS1) - set(dfc.TABS2)
没问题。 TABS1和TABS2具有值。
有什么想法吗?谢谢。
我在下面添加示例数据。
GROUP TABS1 TABS2
A {'T1','T2','T3'} {'T2','T3','T4'}
B {'T5', 'T6'} {'T6'}
克里斯给出了例子,但是使用了非常不同的数据集。我在第三列“ INTERSECTION”中寻找TAB1和TAB2的交集。
如上所述,我没问题
dfc['LEFT'] = set(dfc.TAB1) - set(dfc.TAB2)
这看起来应该很简单...
答案 0 :(得分:0)
set
会删除重复项,因此您得到的字典长度小于数据帧的长度。您需要确保分配给新列的数组的长度等于数据帧的长度。如果要使用列表理解,可以用NaN
替换非交叉点:
# sample data
df = pd.DataFrame([[1,2,3], [1,2,3], [2,3,4], [3,4,5]], columns=list('abc'))
# list comprehension
df['intersection'] = [a if a in set(df['b']) else np.nan for a in df['a']]
a b c intersection
0 1 2 3 NaN
1 1 2 3 NaN
2 2 3 4 2.0
3 3 4 5 3.0