代码之家  ›  专栏  ›  技术社区  ›  Mia

在Python熊猫->字符串列表中查找两列的交点

  •  13
  • Mia  · 技术社区  · 7 年前

    我想计算A列和B列相交的实例数。 列A和B中的行是字符串列表。 例如,A列可能包含[汽车、乘客、卡车],B列可能包含[汽车、房子、花、卡车]。因为在这种情况下,两个字符串重叠,所以列C应显示->2.

    我尝试过(这些工作都没有):

    df['unique'] = np.unique(frame[['colA', 'colB']])
    

    def unique(colA, colB):
        unique1 = list(set(colA) & set(colB))
        return unique1
    
    df['unique'] = df.apply(unique, args=(df['colA'], frame['colB']))
    

    TypeError:(“unique()接受2个位置参数,但提供了3个”,“发生在索引项目上”)

    1 回复  |  直到 7 年前
        1
  •  15
  •   jezrael    7 年前

    我相信需要 length 具有 set.intersection 在列表理解中:

    df['C'] = [len(set(a).intersection(b)) for a, b in zip(df.A, df.B)]
    

    或:

    df['C'] = [len(set(a) & set(b)) for a, b in zip(df.A, df.B)]
    

    样品 :

    df = pd.DataFrame(data={'A':[['car', 'passenger', 'truck'], ['car', 'truck']],
                            'B':[['car', 'house', 'flower', 'truck'], ['car', 'house']]})
    print (df)
                             A                            B
    0  [car, passenger, truck]  [car, house, flower, truck]
    1             [car, truck]                 [car, house]
    
    df['C'] = [len(set(a).intersection(b)) for a, b in zip(df.A, df.B)]
    print (df)
                             A                            B  C
    0  [car, passenger, truck]  [car, house, flower, truck]  2
    1             [car, truck]                 [car, house]  1