我有一个有几千行的数据框。一列仅包含3个值:-1,0,1。我想在滚动窗口(假设为100)中计算特定值(假设为0)出现的次数。我该怎么做?我没有看到这样一个与对象Rolling相关的方法,我不知道如何通过apply来实现。
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]
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)
7cwmlq893#
使用Pandas的where()和rolling().count():
df['countcol'] = df.inputcol.where(df.inputcol == 0).rolling(100, min_periods=1).count()
where在条件不匹配时返回NaN,count统计所有非NaN值。
where
count
3条答案
按热度按时间jchrr9hc1#
这很简单,我编写了一个快速演示。你应该明白的。
示例
yh2wf1be2#
我想这个会有帮助。我测试过了,很有效
7cwmlq893#
使用Pandas的where()和rolling().count():
where
在条件不匹配时返回NaN,count
统计所有非NaN值。