Pandas:将串联的字符串与另一个系列的字符串匹配

时间:2014-05-08 14:24:55

标签: python string python-3.x pandas match

我有一个如下所示的DataFrame:

Full                          Partial
ABCDEFGHIJKLMNOPQRSTUVWXYZ    FGHIJKL
ANLHDFKNADHFBAKHFGBAKJFB      FKNADH
JABFKADFNADKHFBADHBFJDHFBADF  ABFKA

我想要做的是将Full中与Partial不匹配的所有内容放在小写字母中,产生以下内容:

Coverage
abcdef_GHIJKL_mnopqrstuvwxyz
anlhd_FKNADH_fbakhfgbakjfb
j_ABFKA_dfnadkhfbadhbfjdhfbadf

我该怎么做?我环顾四周,似乎series.str.extract()可能是一个解决方案,但我不确定,当我尝试这样做时:

df['Full'].str.extract(data['Partial'])

......它只说系列无法播放。我假设extract只接受一个参数,而不是一个系列?有没有办法绕过这个? extract甚至是正确的方式来实现我正在寻找的东西,还是有另一种方式?我想我可能会找到提取字符串索引并执行以下伪代码的方法:

df['Coverage'] = data['Full'][:start].lower() + '_' + data['Partial'] + \
     '_' + data['Full'][End:].lower()

...其中StartEnd分别是data['Partial']开始和结束的索引。想法?

1 个答案:

答案 0 :(得分:2)

也许不是最优雅,但这是一个解决方案:

对于df:

                           Full  Partial
0    ABCDEFGHIJKLMNOPQRSTUVWXYZ  FGHIJKL
1      ANLHDFKNADHFBAKHFGBAKJFB   FKNADH
2  JABFKADFNADKHFBADHBFJDHFBADF    ABFKA

此:

df.apply(lambda r: r.Full.lower().replace(r.Partial.lower(), '_' + r.Partial + '_'), axis=1)

返回:

0      abcde_FGHIJKL_mnopqrstuvwxyz
1        anlhd_FKNADH_fbakhfgbakjfb
2    j_ABFKA_dfnadkhfbadhbfjdhfbadf

对于每一行,将完整字符串转换为小写,并将“部分字符串”替换为原始部分字符串,并在两侧添加两个下划线。