我试图在熊猫数据框架中创建一列微卫星图案。我有一列给出了图案的长度,另一列给出了整个微卫星。
这是感兴趣的列的一个例子。
motif_len sequence
0 3 ATTATTATTATT
1 4 ATCTATCTATCT
2 3 ATCATCATCATC
我想使用 motif_len 中的值对序列中的值进行切片,以给出每个微卫星的单个重复(motif)。然后,我想将所有这些主题添加为数据框中的第三列,以提供类似的内容。
motif_len sequence motif
0 3 ATTATTATTATT ATT
1 4 ATCTATCTATCT ATCT
2 3 ATCATCATCATC ATC
我尝试了一些没有运气的事情。
>>df['motif'] = df.sequence.str[:df.motif_len]
>>df['motif'] = df.sequence.str[:df.motif_len.values]
两者都是motif列,但所有值都是NaN。
我想我明白为什么这些不起作用。我将一个系列/数组作为切片中的上部索引而不是来自mot_len列的值传递。
我还尝试通过遍历每个系列创建一个系列 有什么想法吗?
答案 0 :(得分:3)
您可以在df pass apply
上调用axis=1
以逐行应用并使用列值对str进行切片:
In [5]:
df['motif'] = df.apply(lambda x: x['sequence'][:x['motif_len']], axis=1)
df
Out[5]:
motif_len sequence motif
0 3 ATTATTATTATT ATT
1 4 ATCTATCTATCT ATCT
2 3 ATCATCATCATC ATC