我正在尝试对此数据框进行以下操作
a b c d
0 1 2 3 4
1 10 20 30 40
2 100 200 300 400
3 1000 2000 3000 4000
4 10000 20000 30000 40000
5 100000 200000 300000 400000
所需的输出 数据框列表
df1:
1 10 100 1000
10 100 1000 10000
100 1000 10000 100000
df2:
2 20 200 2000
20 200 2000 20000
200 2000 20000 200000
df3:
3 30 300 3000
30 300 3000 30000
300 3000 30000 300000
window_size=3
overlap = 50
stride = int(window_size/(100/overlap))
ndf = pd.DataFrame()
for i in range(df.shape[1]):
column = df.iloc[:,i:1+i]
for j in range(df.shape[0]-2):
window = column.iloc[stride*j:window_size+stride*j,:]
ndf = ndf.append(window)
print(ndf)
我无法获得ndf数据帧。相反,我得到这个:
a
0 1
1 10
2 100
1 10
2 100
3 1000
2 100
3 1000
4 10000
3 1000
4 10000
5 100000
如何将我的window
加入到该数据列的新数据框中?
谢谢
答案 0 :(得分:0)
您可以将DataFrame.rolling
与pd.concat
一起使用:
注意:此方法需要pandas >= 1.1.0
才能迭代rolling
对象,请参见此PR
for col in df.columns:
d = pd.concat(
[i.reset_index(drop=True) for i in df[col].rolling(3) if len(i) > 2],
axis=1
)
d.columns = list(range(d.shape[1]))
print(d)
0 1 2 3
0 1 10 100 1000
1 10 100 1000 10000
2 100 1000 10000 100000
0 1 2 3
0 2 20 200 2000
1 20 200 2000 20000
2 200 2000 20000 200000
0 1 2 3
0 3 30 300 3000
1 30 300 3000 30000
2 300 3000 30000 300000
0 1 2 3
0 4 40 400 4000
1 40 400 4000 40000
2 400 4000 40000 400000