如果我用错了声门,请纠正我。我想用不同的步骤转换数据。我发现对于可变的窗口大小,这个值会偏移1:
import pandas as pd
import numpy as np
a=np.random.rand(30)
series=pd.DataFrame(a)
window_size = 3
series_s = series.copy()
for i in range(window_size):
series = pd.concat([series, series_s.shift(-(i+1))], axis = 1)
series.dropna(axis=0, inplace=True)
在这里,我是这样改变的(点只是它将如何进行):
^{pr2}$我想做的是移位,例如2:
5 4 8
6 3 9
4 8 10
3 9 .
8 10 .
9 . .
10 . .
我该如何更改上面的代码或如何更改?在
你能做的就是定义一个叫做累积滞后的变量。 例如,设window size=n,lag_rate为2,则原始列的滞后为零,第一列相对于原始列的滞后为2,第二列相对于第一列的滞后为4,第n列相对于第一列的滞后为2*n
稍微修改代码以提高可读性:
现在,我将开始迭代window_size参数以生成新列。注意,应该从1开始for循环,而不是从零开始,因为如果从零开始,实际上就是复制dataframe的原始列
^{pr2}$最后,我使用dropna函数打印头部:
我的输出示例:
不管怎样,使用这种方法,您将以显著的速度丢失数据。如果len(df)/window_size==lag_rate,那么在删除N/A值之后,数据帧中的行数将为零
除了您下面的评论,我替换了您在示例中提到的值,得到了相同的输出:
shift
返回数据帧的副本,它不会修改它,因此没有必要创建副本。在您可以通过使用列表理解进一步清理代码,并使用一些代数将每列移动两个而不是一个。在
这种方法确实为每个列保留了相同的列标题,您可以使用类似的方法进行修复:
^{pr2}$相关问题 更多 >
编程相关推荐