Как добавить столбец в пустой фрейм данных pandas

#python #pandas #dataframe #join

#python #pandas #фрейм данных #Присоединиться

Вопрос:

я пытаюсь сделать следующее с этим фреймом данных

 
    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. В чем здесь логика? Это типичная проблема XY , вы спрашиваете, почему ваше решение не работает, вместо того, чтобы спрашивать о вашей исходной проблеме

Ответ №1:

Вы можете использовать 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