Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 - Fatal编程技术网

Python 达到极限时停止,低于极限时继续

Python 达到极限时停止,低于极限时继续,python,pandas,Python,Pandas,有一个pd系列。 对于“a”列,当总和大于k(k=2)时,任何正数据都将被删除(不超过对总和结果的添加),如果总和小于-k,任何负数据都将被删除。我已经用循环实现了这个函数,但是太慢了。我如何修改这个函数?多谢各位 我正在考虑通过扩展功能来改进功能。像这样。但这是错误的,因为总和取决于以前的数据 def c_sum(x): s=x.sum() k=2 if (s<k+1 )and (s>-k-1): return s elif s>

有一个pd系列。 对于“a”列,当总和大于k(k=2)时,任何正数据都将被删除(不超过对总和结果的添加),如果总和小于-k,任何负数据都将被删除。我已经用循环实现了这个函数,但是太慢了。我如何修改这个函数?多谢各位

我正在考虑通过扩展功能来改进功能。像这样。但这是错误的,因为总和取决于以前的数据

def c_sum(x):
    s=x.sum()
    k=2
    if (s<k+1 )and (s>-k-1):
        return s
    elif s>k:
        return 2
    else:
        return -2

%time sig['x']=p

pd.expanding_apply(sig['a'],c_sum)    
定义c_和(x): s=x.sum() k=2 如果(s-k-1): 返回s elif s>k: 返回2 其他: 返回-2 %时间信号['x']=p pd.扩展应用(sig['a'],c_sum) ============以下代码是正确的,但速度较慢==========

sig = pd.DataFrame(np.random.randint(-1,2,[100,4]),columns=['a','b','c','d'],\
index=pd.date_range('6/12/2012', periods=100,freq='5min'))

def mytest():
    global count
    for i in sig['a']:
        temp=0
        if count>1:
            temp=sig['d'].iloc[count-1]      
        s=(temp+i)
        if np.abs(s)<(k+1):
            sig['d'].iloc[count]= s
        else:          
            sig['d'].iloc[count]=temp
        count=count+1
sig=pd.DataFrame(np.random.randint(-1,2,[100,4]),列=['a','b','c','d']\
索引=pd.日期\范围('2012年12月6日',周期=100,频率=5min'))
def mytest():
全局计数
对于sig['a']中的i:
温度=0
如果计数>1:
temp=sig['d'].iloc[count-1]
s=(温度+i)

如果np.abs(s)说输入进入
1-1
。如果输出转到
12
12
?是的,输出转到12如果我理解正确,您的扩展应用对我来说很好,尽管新语法(版本0.18.0)是
sig.expansing().apply(c\u sum)
我怀疑扩展/应用是一种可行的方法,尽管如果扩展/应用仍然太慢的话,使用numpy函数或使用numba可能会更快。但扩展函数似乎有问题。输入11-1,输出12,但我想得到输出12。因为当我将限制设置为sum时,我无法更改原始序列,而新的c_sum取决于前一个序列。这意味着当输入为1-1-1时,c_和的输出为12。谢谢约翰的评论,有了numpy功能,速度更快。我仍然想知道如何用展开函数求解它。