我在python 3中有一个数据框,看起来像这样,它的索引上有一个时间戳。我想进行10秒的前滚。
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()
这是预期的输出:
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。
其余部分如下: 非常感谢。