我有一个数据框,这是其中的一部分。
CodeID Codes
0 'code1' '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]' ...
1 'code2' '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]' ...
2 'code3' '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]' ...
...
我尝试做的是从列Codes
中提取符合模式r"\[<code in CodeID column>[^][]*\]"
类似的东西:
df['Code'] = df['Codes'].str.find(r"\[<code in CodeID column>[^][]*\]")
This recent question似乎暗示它不可能以矢量化方式存在,但情况并非完全相同。
答案 0 :(得分:1)
我们当然可以使用一列中的字符串来比较下面的字符串,
在lambda表达式中,x [0]是codeID,x [1]是代码。
import re
import pandas as pd
Out[20]:
CodeID Codes
0 'code1' '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'
1 'code2' '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'
2 'code3' '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'
df[['CodeID','Codes']].apply(lambda x: re.match(r"\[%s[^][]*\]"%x[0], x[1]),axis=1)
Out[21]:
0 None
1 None
2 None
dtype: object
由于我的正则表达能力差,它返回None:)