по индексу i равен gen по индексу i+1 и
[*]Если есть последовательные единицы, то счетчик будет быть таким: if (количество последовательных 1) %2 == 0: count = количество последовательных/2, если нет: count = (количество последовательных - 1) /2
с помощью этого кода я могу добиться того, чего хочу хочу:
k=0
j=0
z={}
for i in range(wk.shape[0]):
if wk['diff'][i] == 1:
if wk['gen'][i] == wk['gen'][i+1]:
if j == 0:
j+=2
if j%2==0:
k+=1
if j>=2:
j+=1
z[wk['gen'][i]] = k
if wk['gen'][i] != wk['gen'][i+1]:
j=0
k=0
и результат словаря z: {'A': 2, 'B': 1, 'D': 4
но когда я использовал большие данные (более 410 000 записей), счетчик не всегда начинался с 0, когда gen в индексе i не равен gen< /code> по индексу i+1. Что не так с моим кодом?
У меня есть DataFrame pandas, например: [code]d={'gen':['A','A','A','A','B','B','B','B','C','D','D','D','D','D','D','D','D','D','D'], 'diff':pd.Series([1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1], index=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17])} wk = pd.DataFrame(data=d, index=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]) [/code] моя цель — подсчитать, сколько вхождений имеет ген на основе различий с некоторыми критериями:
[*]Считать, если diff равен 1, и [*][code]gen[/code] по индексу i равен gen по индексу i+1 и [*]Если есть последовательные единицы, то счетчик будет быть таким: if (количество последовательных 1) %2 == 0: count = количество последовательных/2, если нет: count = (количество последовательных - 1) /2
с помощью этого кода я могу добиться того, чего хочу хочу: [code]k=0 j=0 z={} for i in range(wk.shape[0]): if wk['diff'][i] == 1: if wk['gen'][i] == wk['gen'][i+1]: if j == 0: j+=2 if j%2==0: k+=1 if j>=2: j+=1 z[wk['gen'][i]] = k if wk['gen'][i] != wk['gen'][i+1]: j=0 k=0 [/code] и результат словаря z: {'A': 2, 'B': 1, 'D': 4 но когда я использовал большие данные (более 410 000 записей), счетчик не всегда начинался с 0, когда gen в индексе i не равен gen< /code> по индексу i+1. Что не так с моим кодом?