比较两列中用逗号分隔的项目

时间:2018-11-18 19:17:54

标签: python pandas

我有一个包含两列的表,分别为A列和B列。每列都有以逗号分隔的项目,如下所示。

enter image description here

我想创建第三列(C列),该列返回A列中存在但B列中不存在的项目

enter image description here

对此我将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用设置交集。请注意,如果您使用pandas的话,性能可能会不佳,但是有可能

inter = ds.A.str.split(',').apply(set) - ds.B.str.split(',').apply(set).values
df['C'] = inter.str.join(',')

不过,我建议使用纯Python方法。

df['C'] = [','.join(set(a.split(',')) - set(b.split(','))) for a,b in zip(ds.A, ds.B)]

时间清晰

%timeit [','.join(set(a.split(',')) - set(b.split(','))) for a,b in zip(ds.A, ds.B)]
40.4 µs ± 1.08 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit ds.A.str.split(',').apply(set) - ds.B.str.split(',').apply(set).values
730 µs ± 27 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

答案 1 :(得分:0)

尝试以下代码(沿轴(1)的函数应用:

import pandas as pd
import re

# Source data
df = pd.DataFrame( data={'A': [ 'Lisa, John, Sam', 'Lisa, John, Sam' ],
    'B': [ 'Lisa, Peter, Sam', 'Lisa, Peter' ] })
pat = re.compile(r',\s*')
df['C'] = df.apply(lambda x: ', '.join(\
    set(re.split(pat, x.A)) - set(re.split(pat, x.B))), axis=1)

结果是:

                 A                 B          C
0  Lisa, John, Sam  Lisa, Peter, Sam       John
1  Lisa, John, Sam       Lisa, Peter  John, Sam