[英]Matching two pandas series: How to find a string element from one series in another series and then create a new column
[英]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()
...其中Start
和End
是data['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.