gpt4 book ai didi

python - 使用其他列对 Pandas 对象列进行切片

转载 作者:行者123 更新时间:2023-11-28 22:22:05 25 4
gpt4 key购买 nike

给定这张表:

╔═══╦══════════╦═══════════╦═════════════╗
║ ║ position ║ amino_var ║ sequence ║
╠═══╬══════════╬═══════════╬═════════════╣
║ 0 ║ 3 ║ A ║ MWSWKCLLFWA ║
║ 1 ║ 4 ║ G ║ MWSWKCLLFWH ║
║ 2 ║ 6 ║ I ║ MWSWKCLFLVH ║
║ 3 ║ 3 ║ C ║ MWSWVESFLVH ║
║ 4 ║ 2 ║ V ║ MWEQAQPWGAH ║
╚═══╩══════════╩═══════════╩═════════════╝

或者您可以使用以下方法构建此数据框:

uniprots = pd.DataFrame({'position': [3,4,6,3,2], 'amino_var': ['A', 'G', 'I', 'C', 'V'], 'sequence': ['MWSWKCLLFWA', 'MWSWKCLLFWH', 'MWSWKCLFLVH', 'MWSWVESFLVH', 'MWEQAQPWGAH']})

我想把 position + 1position - 1 之间的序列部分切片,例如,然后替换 position 中的字母amino_var 中的字母。

我试过这个:

uniprots.sequence.str[uniprots.position - 1 : uniprots.position + 1]

但是我得到了一个充满 NaN 的系列。我的预期输出是:

╔═══╦════════╗
║ ║ output ║
╠═══╬════════╣
║ 0 ║ WAW ║
║ 1 ║ SGK ║
║ 2 ║ KIL ║
║ 3 ║ WCW ║
║ 4 ║ MVE ║
╚═══╩════════╝

最佳答案

您可以使用 DataFrame.apply为此:

def get_subsequence(row, width=1):
seq = row['sequence']
pos = row['position']-1
return seq[pos-width:pos] + row['amino_var'] + seq[pos+1:pos+width+1]

uniprots['sequence'] = uniprots.apply(get_subsequence, axis=1)

然后我们得到:

>>> uniprots.apply(get_subsequence, axis=1)
0 WAW
1 SGK
2 KIL
3 WCW
4 MVE
dtype: object

如果我们想要更大的跨度,我们可以设置width参数,例如functools.partial:

<b>from functools import partial</b>

uniprots['sequence'] = uniprots.apply(<b>partial(</b>get_subsequence<b>, width=3)</b>, axis=1)

结果是:

>>> uniprots.apply(partial(get_subsequence, width=3), axis=1)
0 AWKC
1 MWSGKCL
2 SWKILFL
3 CWVE
4 VEQA

字符串不等长的原因是因为我们碰到了字符串的边界。

关于python - 使用其他列对 Pandas 对象列进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47846256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com