Python 达到极限时停止,低于极限时继续
有一个pd系列。 对于“a”列,当总和大于k(k=2)时,任何正数据都将被删除(不超过对总和结果的添加),如果总和小于-k,任何负数据都将被删除。我已经用循环实现了这个函数,但是太慢了。我如何修改这个函数?多谢各位 我正在考虑通过扩展功能来改进功能。像这样。但这是错误的,因为总和取决于以前的数据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>
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功能,速度更快。我仍然想知道如何用展开函数求解它。