我正在使用表示向量(大小和方向)的时间序列数据.我想要
resample我的数据并使用describe函数作为how参数.
但是,describe方法使用标准平均值,我想使用特殊函数来平均方向.因此,我实现了自己的基于pandas.Series.describe()实现的describe方法:
def directionAverage(x): result = np.arctan2(np.mean(np.sin(x)),np.mean(np.cos(x))) if result < 0: result += 2*np.pi return result def directionDescribe(x): data = [directionAverage(x),x.std(),x.min(),x.quantile(0.25),x.median(),x.quantile(0.75),x.max()] names = ['mean','std','min','25%','50%','75%','max'] return Series(data,index=names)
问题是当我这样做时:
df['direction'].resample('10Min',how=directionDescribe)
我得到了这个例外(最后几行显示):
File "C:\Python26\lib\site-packages\pandas\core\generic.py",line 234,in resample return sampler.resample(self) File "C:\Python26\lib\site-packages\pandas\tseries\resample.py",line 83,in resample rs = self._resample_timestamps(obj) File "C:\Python26\lib\site-packages\pandas\tseries\resample.py",line 217,in _resample_timestamps result = grouped.aggregate(self._agg_method) File "C:\Python26\lib\site-packages\pandas\core\groupby.py",line 1626,in aggregate result = self._aggregate_generic(arg,*args,**kwargs) File "C:\Python26\lib\site-packages\pandas\core\groupby.py",line 1681,in _aggregate_generic return self._aggregate_item_by_item(func,line 1706,in _aggregate_item_by_item result[item] = colg.aggregate(func,line 1357,in aggregate result = self._aggregate_named(func_or_funcs,line 1441,in _aggregate_named raise Exception('Must produce aggregated value')
问题是:如何实现我自己的describe函数,以便它可以与resample一起使用?
解决方法
您可以将组合作为一个时间单位,而不是重新采样.对于该组,您可以应用您选择的功能,例如您的directionAverage功能.
请注意,我正在导入TimeGrouper函数以允许按时间间隔进行分组.
import pandas as pd import numpy as np from pandas.tseries.resample import TimeGrouper #group your data new_data = df['direction'].groupby(TimeGrouper('10min')) #apply your function to the grouped data new_data.apply(directionDescribe)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。