如果我使用了错误的词汇,请纠正我。我想用不同的步骤转移我的数据。我发现对于可变窗口大小,此值会移动 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)
这里我像这样移动(点只是为了它会如何进行):
5 6 4
6 4 3
4 3 8
3 8 9
8 9 10
9 10 .
10 . .
我想做的是改变,例如通过 2:
5 4 8
6 3 9
4 8 10
3 9 .
8 10 .
9 . .
10 . .
我该如何更改上面的代码或者我该如何做到这一点?
最佳答案
shift
返回数据帧的副本,它不会修改它,因此不需要创建副本。
您可以使用列表理解来进一步清理代码,并使用一些代数将每列移动两位而不是一位。
x = np.random.randint(1, 10, 10)
df = pd.DataFrame(x)
dfs = [df.shift(-(2+2*i)) for i in range(3)]
pd.concat([df, *dfs], axis=1)
0 0 0 0
0 3 1.0 3.0 8.0
1 9 1.0 6.0 8.0
2 1 3.0 8.0 1.0
3 1 6.0 8.0 9.0
4 3 8.0 1.0 NaN
5 6 8.0 9.0 NaN
6 8 1.0 NaN NaN
7 8 9.0 NaN NaN
8 1 NaN NaN NaN
9 9 NaN NaN NaN
这种方法确实为每列留下了相同的列标题,您可以使用以下内容来修复:
df_result.columns = range(len(df_result.columns))
关于python - 在Python中以不同的步骤转移数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659519/