繁体   English   中英

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

[英]Pandas: matching a string in series with string from another series

我有一个看起来像这样的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()

...其中StartEnddata['Partial']开始和结束的索引。 思考?

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

对于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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM