前滚窗口自定义函数python

时间:2018-12-17 03:11:09

标签: python pandas rolling-computation

我在python 3中有一个数据框,看起来像这样,它的索引上有一个时间戳。我想进行10秒的前滚。

enter image description here

 df = pd.DataFrame({'A': [25,4,2,33,44,88,51,29,18,42]})
 df.index = [pd.Timestamp('20130101 09:00:01'),
         pd.Timestamp('20130101 09:00:02'),
         pd.Timestamp('20130101 09:00:03'),
         pd.Timestamp('20130101 09:00:05'),
         pd.Timestamp('20130101 09:00:06'),
         pd.Timestamp('20130101 09:00:10'),
         pd.Timestamp('20130101 09:00:17'),
         pd.Timestamp('20130101 09:00:22'),
         pd.Timestamp('20130101 09:00:45'),
         pd.Timestamp('20130101 09:00:53')]  

对于每个观察,我想在接下来的10秒内找到观察,并使用自定义函数进行一些分析。我的功能如下:

def logsum(data):
    series = pd.Series(data)
    return 2*(np.log(data.max()) + np.log(data.min()))

基本上找到序列,然后计算最大和最小对数的总和。

我尝试反转序列,然后执行正常的滚动窗口分析,现在有两个问题。 1.无法执行我的logum功能; 2.系列必须是单调的:“ ValueError:索引必须是单调的”

我当前的代码是:

df['B-roll'] = df[::-1].rolling('10s').A.logsum()  

这是预期的输出:

enter image description here

   df = pd.DataFrame({'A': [25,4,2,33,44,88,51,29,18,42], 'B-roll':   [4.49,4.49,4.49,6.92,7.17,7.3,6.33,5.84,5.75,6.49]})
   df.index = [pd.Timestamp('20130101 09:00:01'),
         pd.Timestamp('20130101 09:00:02'),
         pd.Timestamp('20130101 09:00:03'),
         pd.Timestamp('20130101 09:00:05'),
         pd.Timestamp('20130101 09:00:06'),
         pd.Timestamp('20130101 09:00:10'),
         pd.Timestamp('20130101 09:00:17'),
         pd.Timestamp('20130101 09:00:22'),
         pd.Timestamp('20130101 09:00:45'),
         pd.Timestamp('20130101 09:00:53')]  

例如df ['B-roll'] [0]为4.49。在接下来的10秒中,最大“ A”为88,最小“ A”为2。因此,对数求和函数得出= 2 *(LOG(88)+ LOG(2))= 4.49。

其余部分如下: 非常感谢。

0 个答案:

没有答案