我是python的新手,并且为此苦苦挣扎了一段时间。我有一个看起来像这样的文件:
name seq
1 a1 bbb
2 a2 bbc
3 b1 fff
4 b2 fff
5 c1 aaa
6 c2 acg
其中name是字符串的名称,seq是字符串。我想要一个新的列或一个新的数据框,以指示每两行之间没有重叠的差异数。例如,我想要名称[a1-a2],然后是[b1-b2],最后是[c1-c2],序列之间的差异数。
所以我需要这样的东西:
name seq diff
1 a1 bbb NA
2 a2 bbc 1
3 b1 fff NA
4 b2 fff 0
5 c1 aaa NA
6 c2 acg 2
非常感谢您的帮助
似乎您要使用成对的jaccard distance。这是使用groupby
和scipy.spatial.distance.jaccard
的一种方法:
scipy.spatial.distance.jaccard
from scipy.spatial.distance import jaccard
g = df.groupby(df.name.str[0])
df['diff'] = [sim for _, seqs in g.seq
for sim in [None, jaccard(*map(list,seqs))]]