Может кто-нибудь предложить эффективный способ преобразования столбца (в кадре данных Python Panda) в несколько столбцов с чередованием назначения столбцов. Я мог бы сделать это с помощью цикла, но подумал, есть ли более элегантный способ. Для примера рассмотрим следующий пример:

Col
1 
2  
3  
4  
5  
6 
7  
8  
 

К

x1 x2 x3
1 2 3
2 3 4
3 4 5
4 5 6
5 6 7
6 7 8
1
Muhammad Rusli 2 Мар 2021 в 15:57

1 ответ

Лучший ответ

Вы можете использовать шаги с конструктором DataFrame и DataFrame.to_numpy:

def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)


df = pd.DataFrame(rolling_window(df['Col'].to_numpy(), 3), 
                  columns=['col1','col2','col3'])
print (df)
   col1  col2  col3
0     1     2     3
1     2     3     4
2     3     4     5
3     4     5     6
4     5     6     7
5     6     7     8

РЕДАКТИРОВАТЬ: для более старых версий панд используйте {{X0 }} для преобразования столбца в 1d array:

df = pd.DataFrame(rolling_window(df['Col'].values, 3), 
                  columns=['col1','col2','col3'])
print (df)
0
jezrael 2 Мар 2021 в 13:34