【问题标题】:Pandas and Sets - ValueError: Length of values does not match length of index熊猫和集合 - ValueError:值的长度与索引的长度不匹配
【发布时间】:2022-02-22 01:04:45
【问题描述】:

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

dfc['INTERSECTION'] =  set(dfc.TABS1).intersection(set(dfc.TABS2))

我收到一个值错误。我能够做到

dfc['LEFT'] = set(dfc.TABS1) - set(dfc.TABS2)

没问题。 TABS1 和 TABS2 都有值。

有什么想法吗?谢谢。

我在下面添加示例数据。

GROUP TABS1               TABS2 
A     {'T1','T2','T3'}   {'T2','T3','T4'} 
B     {'T5', 'T6'}       {'T6'}

Chris 举了一个例子,但是使用了非常不同的数据集。我在第三列“INTERSECTION”中寻找 TAB1 和 TAB2 的交集。 如上所述,我没有问题

dfc['LEFT'] = set(dfc.TAB1) - set(dfc.TAB2)

这看起来应该是这么直截了当......

【问题讨论】:

    标签: python pandas set


    【解决方案1】:

    set 删除重复项,因此您最终会得到一个长度小于数据帧长度的 dict。您需要确保分配给新列的数组长度等于数据框的长度。如果你想使用列表理解,你可以用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多