как изменить структуру данных в панд python

#python #arrays #pandas

Вопрос:

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

 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:

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

ИЗМЕНИТЬ: Для более старых версий pandas используйте DataFrame.values для преобразования столбца в 1d array :

 df = pd.DataFrame(rolling_window(df['Col'].values, 3), 
                  columns=['col1','col2','col3'])
print (df)
 

Комментарии:

1. Объект ‘DataFrame’ не имеет атрибута ‘to_numpy’

2. df = pd.DataFrame(rolling_window(нормализованный.to_numpy(), 3), объект «DataFrame» не имеет атрибута «to_numpy»

3. @MuhammadRusli — Ответ был отредактирован, похоже, ваши панды немного устарели