Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在滚动窗口中计算特定值_Python_Pandas_Dataframe_Rolling Computation - Fatal编程技术网

Python 在滚动窗口中计算特定值

Python 在滚动窗口中计算特定值,python,pandas,dataframe,rolling-computation,Python,Pandas,Dataframe,Rolling Computation,我有一个包含数千行的数据帧。一列仅包含3个值:-1、0、1。我想在滚动窗口(比如100)中计算特定值(比如0)出现的次数 我怎么做?我没有看到与对象滚动相关的这种方法,我不知道如何通过应用来实现。这非常简单,我编写了一个快速演示。你应该明白这一点 示例 #参数 #可数列 #大小-窗口大小(100) def窗口(iterable,大小=2): i=国际热核实验堆(iter) 赢=[] 对于范围(0,大小)内的e: win.append(下一个(i)) 屈服赢 对于i中的e: win=win[1::

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


我怎么做?我没有看到与对象滚动相关的这种方法,我不知道如何通过应用来实现。

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

示例

#参数
#可数列
#大小-窗口大小(100)
def窗口(iterable,大小=2):
i=国际热核实验堆(iter)
赢=[]
对于范围(0,大小)内的e:
win.append(下一个(i))
屈服赢
对于i中的e:
win=win[1::][e]
屈服赢
#样本数据
a=[1,0,0,0,1,1]
从收款进口柜台
结果=[]
value=1#保持计数的值(-1,0,1)
对于窗口中的i(a,2):
计数=计数器(i)[值]
结果.追加(计数)
#样本输出
打印(结果)
[1, 0, 0, 1, 2]

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

示例

#参数
#可数列
#大小-窗口大小(100)
def窗口(iterable,大小=2):
i=国际热核实验堆(iter)
赢=[]
对于范围(0,大小)内的e:
win.append(下一个(i))
屈服赢
对于i中的e:
win=win[1::][e]
屈服赢
#样本数据
a=[1,0,0,0,1,1]
从收款进口柜台
结果=[]
value=1#保持计数的值(-1,0,1)
对于窗口中的i(a,2):
计数=计数器(i)[值]
结果.追加(计数)
#样本输出
打印(结果)
[1, 0, 0, 1, 2]

我想这会有帮助。我测试过这个,它是有效的

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)

我想这会有帮助的。我测试过这个,它是有效的

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)

这里有一种方法:迭代行并设置一个计数器列表和一个计数器=0,当df的索引达到每100个时,追加到列表中,并将计数器设置为0。至于获取值(我猜它在df的字符串中),可能需要使用正则表达式,或者在apply(lambda x:x.split(','))的帮助下将它们拆分到一个列表中,然后检查列表中是否有0。它有什么索引?请包括
df['thecolumn'].head(7)
。有一种方法可以做到这一点:迭代行并设置一个计数器列表和一个计数器=0,当df的索引达到每100个时,追加到列表中,并将计数器设置为0。至于获取值(我猜它在df的字符串中),可能需要使用正则表达式,或者在apply(lambda x:x.split(','))的帮助下将它们拆分到一个列表中,然后检查列表中是否有0。它有什么索引?请包括
df['thecolumn'].标题(7)