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