我在DataFrame中有以下列。
col1
['SNOMEDCT_US:32113001', 'UMLS:C0265660']
['UMLS:C2674738', 'UMLS:C2674739']
['UMLS:C1290857', 'SNOMEDCT_US:118930001', 'UMLS:C123455']
我想提取UMLS之后的值:并将其存储在另一列中。我正在尝试以下代码行,但没有得到预期的输出。
df['col1'].str.extract(r'\['.*UMLS:(.*)]')
预期输出为:
col1 col2
['SNOMEDCT_US:32113001', 'UMLS:C0265660'] C0265660
['UMLS:C2674738', 'UMLS:C2674739'] C2674738, C2674739
['UMLS:C1290857', 'SNOMEDCT_US:118930001', 'UMLS:C123455'] C1290857, C123455
2条答案
按热度按时间qcbq4gxm1#
可以使用
DataFrame.explode
将列表的行转换为单个字符串的行,然后使用Series.str.extract
匹配所需的正则表达式,最后使用DataFrame.groupby
和DataFrame.agg
将col1
转换回其原始形式,并根据需要使用col2
:这将输出:
czq61nw12#
我使用了在https://regex101.com/中测试的不同re
使用下面的命令,我得到了一个新列,其中的数据格式如您所愿:
第一个.apply()函数基于这个answer,findall函数返回一个列表([C2674738,C2674739])。
由于您希望字符串包含找到的所有匹配项,因此第二个apply()函数(基于answer)将把列表转换为逗号分隔的字符串。
希望有更优雅的答案:-)