熊猫和集合-ValueError:值的长度与索引的长度不匹配

时间:2019-03-18 22:48:19

标签: python pandas set

我正在尝试在数据框中创建一个新列,其中包含两个集合的交集(每个集合包含在两个单独的列中)。列本身包含集合。

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)

这看起来应该很简单...

1 个答案:

答案 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