如何计算熊猫数据框中2个字符串列之间的差异

时间:2018-07-31 04:54:07

标签: python-3.x pandas

我在同一数据框中有2列,如下所示:

A               B
abcdef(as3456)    as3456
pqrst(dh6546)     dh6546

我需要创建另一个C列,如下所示:

  C
 abcdef
 pqrst

我已经能够从A创建列B,但是我的目的还没有完全实现。有人可以帮我从列A和列B中获得列C的问题。我尝试做!= operator和“〜loc”。但是,在这种情况下似乎不起作用。(可能是因为它是字符串)

2 个答案:

答案 0 :(得分:0)

对于每行列之间的差异,请使用replacestrip

df = pd.DataFrame({'A': ['abcdef(as3456)', 'pqrst(dh6546)', 'abcdef(dh6546)'], 
                   'B': ['as3456', 'dh6546', 'as3456']})

print (df)
                A       B
0  abcdef(as3456)  as3456
1   pqrst(dh6546)  dh6546
2  abcdef(dh6546)  as3456#df.B not matched per rows, but matched abcdef by first value of df.B

#replace values from df.B per rows
df['C'] = [i.replace(j, '').strip('()') for i, j in zip(df.A, df.B)]

#replace all values from df.bvalues
pat = '|'.join([r'\({}\)'.format(i) for i in df.B])
df['D'] = df.A.str.replace(pat, '')
print (df)
                A       B              C       D
0  abcdef(as3456)  as3456         abcdef  abcdef
1   pqrst(dh6546)  dh6546          pqrst   pqrst
2  abcdef(dh6546)  as3456  abcdef(dh6546  abcdef

答案 1 :(得分:0)

df['C']=df.A.replace(regex=r'\(.*$', value='')

df
                A       B       C
0  abcdef(as3456)  as3456  abcdef
1   pqrst(dh6546)  dh6546   pqrst

或者您可以这样做:

df['C']=df.A.replace(regex=r'\('+ df.B +r'\)',value="")
              A       B       C
0  abcdef(as3456)  as3456  abcdef
1   pqrst(dh6546)  dh6546   pqrst