pandas滚动窗口中的计数特定值

oprakyz7  于 2023-04-28  发布在  其他
关注(0)|答案(3)|浏览(110)

我有一个有几千行的数据框。一列仅包含3个值:-1,0,1。我想在滚动窗口(假设为100)中计算特定值(假设为0)出现的次数。
我该怎么做?我没有看到这样一个与对象Rolling相关的方法,我不知道如何通过apply来实现。

jchrr9hc

jchrr9hc1#

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

示例

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

yh2wf1be2#

我想这个会有帮助。我测试过了,很有效

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)
7cwmlq89

7cwmlq893#

使用Pandas的where()rolling().count()

df['countcol'] = df.inputcol.where(df.inputcol == 0).rolling(100, min_periods=1).count()

where在条件不匹配时返回NaN,count统计所有非NaN值。

相关问题