如何将列添加到空熊猫数据框

时间:2020-09-20 12:09:48

标签: python pandas dataframe join

我正在尝试对此数据框进行以下操作


    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加入到该数据列的新数据框中? 谢谢

1 个答案:

答案 0 :(得分:0)

您可以将DataFrame.rollingpd.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