如何为Pandas DataFrame含多逗号分隔值的列添加字符串前缀?
问题描述
我尝试在Pandas DataFrame中创建一个新列,该列包含字符串前缀和另一列的值。存储值的列存在多个逗号分隔值的情况,示例如下:
MIMNumber 102610 114080,601079
期望最终的DataFrame呈现为:
MIMNumber OMIM_Link 102610 https://www.omim.org/entry/102610 114080,601079 https://www.omim.org/entry/114080,https://www.omim.org/entry/601079
尝试过以下代码:
df['OMIM_Link'] = df['MIMNumber'].map('https://www.omim.org/entry/{}'.format)
但该方法无法为多逗号分隔的每个值单独添加前缀,结果如下:
MIMNumber OMIM_Link 102610 https://www.omim.org/entry/102610 114080,601079 https://www.omim.org/entry/114080,601079
还尝试了这段代码:
url = 'https://www.omim.org/entry/' df['OMIM_Link'] = df['MIMNumber'].apply(url.join)
但前缀被错误地添加到了每个字符之间,结果如下:
MIMNumber OMIM_Link 102610 1https://www.omim.org/entry/0https://www.omim.org/entry/2https://www.omim.org/entry/6https://www.omim.org/entry/1https://www.omim.org/entry/0 114080,601079 1https://www.omim.org/entry/1https://www.omim.org/entry/4https://www.omim.org/entry/0https://www.omim.org/entry/8https://www.omim.org/entry/0https://www.omim.org/entry/,https://www.omim.org/entry/6https://www.omim.org/entry/0https://www.omim.org/entry/1https://www.omim.org/entry/0https://www.omim.org/entry/7https://www.omim.org/entry/9
解决方法
核心逻辑是:先将每个MIMNumber按逗号拆分为独立编号,给每个编号添加前缀后,再用逗号拼接回字符串。以下是两种可行方案:
方案一:自定义函数结合apply
def generate_omim_links(mim_str): # 拆分字符串并去除每个编号的前后空格 mim_list = [num.strip() for num in mim_str.split(',')] # 为每个编号生成完整链接 link_list = [f'https://www.omim.org/entry/{num}' for num in mim_list] # 拼接成最终字符串 return ','.join(link_list) df['OMIM_Link'] = df['MIMNumber'].apply(generate_omim_links)
方案二:链式操作(更简洁)
df['OMIM_Link'] = df['MIMNumber'].str.split(',')\ .apply(lambda x: ','.join([f'https://www.omim.org/entry/{num.strip()}' for num in x]))
验证结果
执行上述任意代码后,DataFrame会生成预期的OMIM_Link列:
MIMNumber OMIM_Link 102610 https://www.omim.org/entry/102610 114080,601079 https://www.omim.org/entry/114080,https://www.omim.org/entry/601079
内容的提问来源于stack exchange,提问作者eb0906
相关产品推荐
相关产品推荐

