Подсчет на основе критериев в пандахPython

Программы на Python
Ответить
Anonymous
 Подсчет на основе критериев в пандах

Сообщение Anonymous »

У меня есть DataFrame pandas, например:

Код: Выделить всё

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])
моя цель — подсчитать, сколько вхождений имеет ген на основе различий с некоторыми критериями:

[*]Считать, если diff равен 1, и
[*] по индексу 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. Что не так с моим кодом?

Подробнее здесь: https://stackoverflow.com/questions/758 ... -in-pandas
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»