gpt4 book ai didi

python - 如何实现我自己的 describe() 函数以在 resample() 中使用

转载 作者:太空狗 更新时间:2023-10-30 01:23:18 25 4
gpt4 key购买 nike

我正在处理表示向量(幅度和方向)的时间序列数据。我要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, *args, **kwargs)
File "C:\Python26\lib\site-packages\pandas\core\groupby.py", line 1706, in _aggregate_item_by_item
result[item] = colg.aggregate(func, *args, **kwargs)
File "C:\Python26\lib\site-packages\pandas\core\groupby.py", line 1357, in aggregate
result = self._aggregate_named(func_or_funcs, *args, **kwargs)
File "C:\Python26\lib\site-packages\pandas\core\groupby.py", line 1441, in _aggregate_named
raise Exception('Must produce aggregated value')

问题是:如何实现我自己的 describe 函数,以便它与 resample 一起工作?

最佳答案

您可以groupby 而不是重新采样,其中组是一个时间单位。对于这个组,您可以应用您选择的函数,例如您的 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)

关于python - 如何实现我自己的 describe() 函数以在 resample() 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com