Python 函数的集合列表。ValueError:没有结果
滚动后的聚合方法不适用于函数列表 此代码引发一个ValueerrorPython 函数的集合列表。ValueError:没有结果,python,pandas,aggregate,rolling-computation,Python,Pandas,Aggregate,Rolling Computation,滚动后的聚合方法不适用于函数列表 此代码引发一个Valueerror df = pd.DataFrame({'col1':range(3), 'date':pd.date_range('2018-01-01', '2018-01-03')}) df.rolling('6D', min_periods=1, on='date', closed='left').agg([sum]) 但是这段代码对于一个函数来说效果很好 df.rolling('6D', min_periods=1, on='dat
df = pd.DataFrame({'col1':range(3), 'date':pd.date_range('2018-01-01', '2018-01-03')})
df.rolling('6D', min_periods=1, on='date', closed='left').agg([sum])
但是这段代码对于一个函数来说效果很好
df.rolling('6D', min_periods=1, on='date', closed='left').agg(sum)
错误文本:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-389-91b03860c0e6> in <module>
----> 1 df.rolling('6D', min_periods=1, on='date', closed='left').agg([sum])
~/anaconda3/lib/python3.7/site-packages/pandas/core/window.py in aggregate(self, arg, *args, **kwargs)
1683 @Appender(_shared_docs['aggregate'])
1684 def aggregate(self, arg, *args, **kwargs):
-> 1685 return super(Rolling, self).aggregate(arg, *args, **kwargs)
1686
1687 agg = aggregate
~/anaconda3/lib/python3.7/site-packages/pandas/core/window.py in aggregate(self, arg, *args, **kwargs)
310
311 def aggregate(self, arg, *args, **kwargs):
--> 312 result, how = self._aggregate(arg, *args, **kwargs)
313 if result is None:
314 return self.apply(arg, raw=False, args=args, kwargs=kwargs)
~/anaconda3/lib/python3.7/site-packages/pandas/core/base.py in _aggregate(self, arg, *args, **kwargs)
557 return self._aggregate_multiple_funcs(arg,
558 _level=_level,
--> 559 _axis=_axis), None
560 else:
561 result = None
~/anaconda3/lib/python3.7/site-packages/pandas/core/base.py in _aggregate_multiple_funcs(self, arg, _level, _axis)
615 # if we are empty
616 if not len(results):
--> 617 raise ValueError("no results")
618
619 try:
ValueError: no results
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
---->1 df.滚动('6D',最小周期=1,日期,'date',结束,'left')。累计([sum])
聚合中的~/anaconda3/lib/python3.7/site-packages/pandas/core/window.py(self、arg、*args、**kwargs)
1683@Appender(_shared_docs['aggregate'))
1684 def聚合(自身、arg、*args、**kwargs):
->1685返回超级(滚动,自)。聚合(arg,*args,**kwargs)
1686
1687 agg=骨料
聚合中的~/anaconda3/lib/python3.7/site-packages/pandas/core/window.py(self、arg、*args、**kwargs)
310
311 def聚合(自身、arg、*args、**kwargs):
-->312结果,how=self.\聚合(arg、*args、**kwargs)
313如果结果为无:
314返回self.apply(arg,raw=False,args=args,kwargs=kwargs)
聚合中的~/anaconda3/lib/python3.7/site-packages/pandas/core/base.py(self、arg、*args、**kwargs)
557返回自聚集函数(参数,
558 _级别=_级别,
-->559 _轴=_轴),无
560其他:
561结果=无
~/anaconda3/lib/python3.7/site-packages/pandas/core/base.py在聚合函数(self、arg、level、axis)中
615#如果我们是空的
616如果不是len(结果):
-->617提高值错误(“无结果”)
618
619尝试:
ValueError:没有结果
我找到了一个解决办法。我不知道为什么,但在这种情况下,我们需要使用日期列作为索引
df.set_index('date').rolling('6D', min_periods=1, closed='left').agg(['sum','max'])
结果
col1
sum max
date
2018-01-01 NaN 0.0
2018-01-02 0.0 1.0
2018-01-03 1.0 2.0
你可以用一个
dict
instead,我认为它只是一个窗口=一个函数,就像任何其他窗口实现一样(至少是我所知道的那些)。有趣的是,使用dict尝试解决方案时,我得到了分段错误错误,而我的python会话是killed@GrzegorzSkibinskipandas.core.window.Rolling.aggregate的文档声明函数列表是一个合法参数。当我不使用句点作为窗口时,函数列表也可以正常工作。示例df[['col1']].rolling(2).agg([sum,max])
@lostCode您能否提供一个解决方案。我尝试了df.rolling('6D',min_periods=1,on='date',closed='left').agg({'col1':[sum,max]})
但是得到了另一个例外,两者都必须在col1中?你能再创建一个专栏吗