#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 — Ответ был отредактирован, похоже, ваши панды немного устарели