在熊猫滚动窗口中计算特定值

时间:2019-05-28 19:19:36

标签: python pandas dataframe rolling-computation

我有一个包含数千行的数据框。一列仅包含3个值:-1、0、1。我想在滚动窗口(比如说100)中计数特定值(比如说0)出现了多少次。

我该怎么办?我看不到与Rolling对象相关的这种方法,而且我不知道如何通过Apply来实现。

2 个答案:

答案 0 :(得分:0)

这很简单,我编写了一个快速演示。你应该明白这个主意。

示例

# 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]

答案 1 :(得分:0)

我想这会有所帮助。我测试了这个,它有效

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)