我在同一数据框中有2列,如下所示:
A B
abcdef(as3456) as3456
pqrst(dh6546) dh6546
我需要创建另一个C列,如下所示:
C
abcdef
pqrst
我已经能够从A创建列B,但是我的目的还没有完全实现。有人可以帮我从列A和列B中获得列C的问题。我尝试做!= operator和“〜loc”。但是,在这种情况下似乎不起作用。(可能是因为它是字符串)
答案 0 :(得分:0)
对于每行列之间的差异,请使用replace
和strip
:
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