【发布时间】:2017-03-06 03:59:25
【问题描述】:
一个非常简单的例子,仅供理解。
我有以下熊猫数据框:
import pandas as pd
df = pd.DataFrame({'A':pd.Series([1, 2, 13, 14, 25, 26, 37, 38])})
df
A
0 1
1 2
2 13
3 14
4 25
5 26
6 37
8 38
设置n = 3
第一个例子
如何获取新的数据框df1(以一种有效的方式),如下所示:
D1 D2 D3 T
0 1 2 13 14
1 2 13 14 25
2 13 14 25 26
3 14 25 26 37
4 25 26 37 38
提示:将前 n 列视为 数据 (Dx),将最后一列视为 目标 (T)。在第一个示例中,目标(例如 25)取决于前面的 n 个元素(2、13、14)。
第二个例子
如果目标是前面的某个元素(例如+3)怎么办?
D1 D2 D3 T
0 1 2 13 26
1 2 13 14 37
2 13 14 25 38
感谢您的帮助,
吉尔伯托
附:如果您认为标题可以改进,请建议我如何修改它。
更新
感谢@Divakar 和this post,滚动函数可以定义为:
import numpy as np
def rolling(a, window):
shape = (a.size - window + 1, window)
strides = (a.itemsize, a.itemsize)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
a = np.arange(1000000000)
b = rolling(a, 4)
不到 1 秒!
【问题讨论】:
标签: python pandas numpy dataframe scikit-learn