В качестве первого шага я воссоздаю ваши данные с помощью:
#!/usr/bin/env python3
import pandas as pd
# Setup
data = {'name': {1: 'a1', 2: 'a2', 3: 'b1', 4: 'b2', 5: 'c1', 6: 'c2'}, 'seq': {1: 'bbb', 2: 'bbc', 3: 'fff', 4: 'fff', 5: 'aaa', 6: 'acg'}}
df = pd.DataFrame(data)
Решение Вы можете попробовать перебрать кадр данных и сравнить значение seq
последней итерации с текущий. Для сравнения двух строк (хранящихся в столбцах seq
вашего информационного кадра) вы можете применить простое понимание списка, как в этой функции:
def diff_letters(a,b):
return sum ( a[i] != b[i] for i in range(len(a)) )
Итерация по строкам Dataframe
diff = ['NA']
row_iterator = df.iterrows()
_, last = next(row_iterator)
# Iterate over the df get populate a list with result of the comparison
for i, row in row_iterator:
if i % 2 == 0:
diff.append(diff_letters(last['seq'],row['seq']))
else:
# for odd row numbers append NA value
diff.append("NA")
last = row
df['diff'] = diff
Результат выглядит так
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