熊猫中的矢量化字符串插值?没有迭代,这是可行的吗?

时间:2014-12-01 16:51:21

标签: python pandas string-formatting

设置

我想添加一个新列,其中包含一个具有基本/模板形式的URL,并且应该根据行中包含的信息将某些值插入其中。

The table data

我希望能够做什么

base_link = "https://www.vectorbase.org/Glossina_fuscipes/Location/View?r=%(scaffold)s:%(start)s-%(end)s"

# simplify getting column data from data_frame
start = operator.attrgetter('start')
end = operator.attrgetter('end')
scaffold = operator.attrgetter('seqname')

def get_links_to_genome_browser(data_frame):
    base_links = pd.Series([base_link]*len(data_frame.index))
    links = base_links % {"scaffold":scaffold(data_frame),"start":start(data_frame),"end":end(data_frame)}
    return links

2 个答案:

答案 0 :(得分:2)

所以我回答了我自己的问题,但我终于明白了,所以我想把它关闭并记录解决方案。

解决方案是使用data_frame.apply()但是要将get_links_to_genome_browser函数中的索引语法更改为Series语法而不是DataFrame索引语法。

def get_links_to_genome_browser(series):
    link = base_link % {"scaffold":series.ix['seqname'],"start":series.ix['start'],"end":series.ix['end']}
    return link

然后称之为:

df.apply(get_links_to_genome_browser, axis=1)

答案 1 :(得分:0)

我想我得到你所要求的。让我知道

base_link = "https://www.vectorbase.org/Glossina_fuscipes/Location/View?r=%(scaffold)s:%(start)s-%(end)s"

然后你可以做这样的事情

data_frame['url'] = base_link + data_frame['start'] + data_frame['end'] + etc...