web-dev-qa-db-ja.com

Python Pandas->文字列のリストで2つの列の共通部分を見つける

列AとBのインスタンスが交差する数を数えたいと思います。 A列とB列の行は文字列のリストです。たとえば、列Aには[車、乗客、トラック]が含まれ、列Bには[車、家、花、トラック]が含まれます。この場合、2つの文字列が重複しているため、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つが指定されました'、 'インデックスアーティクルで発生しました')

11
Mia

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
10
jezrael