Подсчитайте конкретное значение в прокручивающемся окне pandas

У меня есть фрейм данных с тысячами строк. Один столбец состоит всего из 3 значений: -1, 0, 1. Я хотел бы подсчитать в скользящем окне (скажем, 100), сколько раз встречается определенное значение (скажем, 0).

Как мне это сделать? Я не вижу такого метода, связанного с объектом Rolling, и я не знаю, как это сделать с помощью применения.


person FNTE    schedule 28.05.2019    source источник
comment
Вот один из способов сделать это: перебрать строки и настроить список счетчиков, а счетчик = 0, когда индекс df достигает каждых 100, добавить к списку и установить счетчик на 0. Что касается получения значения (я я предполагаю, что это строка в df), возможно, придется использовать регулярное выражение или разделить их на список с помощью apply(lambda x: x.split(',')) затем проверить, есть ли 0 в списке.   -  person Xp.L    schedule 28.05.2019
comment
Какой у него индекс? Пожалуйста, включите df['thecolumn'].head(7).   -  person wwii    schedule 28.05.2019


Ответы (2)


Это довольно просто, я закодировал быструю демонстрацию. Вы должны получить идею.

Пример

# Parameters
# iterable - column
# size - window size (100)

def window(iterable, size=2):
    i = iter(iterable)
    win = []
    for e in range(0, size):
        win.append(next(i))
    yield win
    for e in i:
        win = win[1:] + [e]
        yield win

# Sample data
a = [1, 0, 0, 0, 1, 1]

from collections import Counter

result = []
value = 1 # Value to keep count (-1, 0, 1)

for i in window(a, 2):
    count = Counter(i)[value]
    result.append(count)

# Sample output
print(result)
[1, 0, 0, 1, 2]
person skillsmuggler    schedule 28.05.2019

Думаю, это поможет. Я проверял это, это работает

def cnt(x):
     prev_count = 0
     for i in x:
         if i == 0:
             prev_count+=1
     return prev_count

df['col'].rolling(100,min_periods=1).apply(cnt)
person YASHPAL SINGH    schedule 10.02.2021