Как переместить столбец в Pandas DataFrame

Я хотел бы переместить столбец в пандDataFrame, но я не смог найти способ сделать это из документации, не переписывая весь DF. кто нибудь знает как это сделать? DataFrame:

##    x1   x2
##0  206  214
##1  226  234
##2  245  253
##3  265  272
##4  283  291

Желаемый вывод:

##    x1   x2
##0  206  nan
##1  226  214
##2  245  234
##3  265  253
##4  283  272
##5  nan  291

Ответы на вопрос(6)

Решение Вопроса
In [18]: a
Out[18]: 
   x1  x2
0   0   5
1   1   6
2   2   7
3   3   8
4   4   9

In [19]: a.x2 = a.x2.shift(1)

In [20]: a
Out[20]: 
   x1  x2
0   0 NaN
1   1   5
2   2   6
3   3   7
4   4   8
 11 апр. 2018 г., 09:42
Я должен сдвинуть 100 столбцов таким же образом, как я могу сделать для цикла?
 19 мая 2017 г., 17:54
Результат отсутствует ## 5. Есть ли в пандах простой способ расширить индекс при использовании shift?
 10 апр. 2018 г., 17:30
Кто-нибудь понял это? № 5 все еще отсутствует
 25 нояб. 2017 г., 18:35
@WaylonWalker Это называется «кататься в ноль»:df['x2'] = np.roll(df['x2'], 1)
 11 окт. 2018 г., 19:41
@Johan вы пытались добавить пустую строку в конце, прежде чем сдвинуть ее?

shift past В конце вашего кадра данных просто добавьте необходимое число:

    offset = 5
    DF = DF.append([np.nan for x in range(offset)])
    DF = DF.shift(periods=offset)
    DF = DF.reset_index() #Only works if sequential index

Я предполагаю импорт

import pandas as pd
import numpy as np

Сначала добавьте новую строку сNaN, NaN,... в конце DataFrame (df).

s1 = df.iloc[0]    # copy 1st row to a new Series s1
s1[:] = np.NaN     # set all values to NaN
df2 = df.append(s1, ignore_index=True)  # add s1 to the end of df

Это создаст новый DF df2. Может быть, есть более элегантный способ, но это работает.

Теперь вы можете сдвинуть его:

df2.x2 = df2.x2.shift(1)  # shift what you want

df.shift (i) сдвигает весь фрейм данных на i единицы вниз.

Так что для я = 1

Входные данные:

    x1   x2  
0  206  214  
1  226  234  
2  245  253  
3  265  272    
4  283  291

Выход:

    x1   x2
0  Nan  Nan   
1  206  214  
2  226  234  
3  245  253  
4  265  272 

Так что запустите этот скрипт, чтобы получить ожидаемый результат

import pandas as pd

df = pd.DataFrame({'x1': ['206', '226', '245',' 265', '283'],
                    'x2': ['214', '234', '253', '272', '291']})

print(df)

df['x2'] = df['x2'].shift(1)

print(df)
 21 окт. 2018 г., 00:05
Добро пожаловать в stackoverflow. Ваш ответ будет более полезным, если вы дадите некоторое объяснение того, как его следует использовать.

>>> df = pd.DataFrame([[206, 214], [226, 234], [245, 253], [265, 272], [283, 291]], 
    columns=[1, 2])
>>> df
     1    2
0  206  214
1  226  234
2  245  253
3  265  272
4  283  291

Тогда вы можете манипулировать индексом второго столбца с помощью

>>> df[2].index = df[2].index+1

и, наконец, повторно объединить отдельные столбцы

>>> pd.concat([df[1], df[2]], axis=1)
       1      2
0  206.0    NaN
1  226.0  214.0
2  245.0  234.0
3  265.0  253.0
4  283.0  272.0
5    NaN  291.0

Возможно, не быстро, но просто для чтения. Рассмотрите возможность установки переменных для имен столбцов и фактического требуемого сдвига.

Изменить: как правило, смещение возможноdf[2].shift(1) как уже сообщалось, однако, что отсечение переноса.

Док Панд что я думаю ответит на этот вопрос:

DataFrame.shift(periods=1, freq=None, axis=0) Shift index by desired number of periods with an optional time freq

Notes

If freq is specified then the index values are shifted but the data is not realigned. That is, use freq if you would like to extend the index when shifting and preserve the original data.

Надеюсь помочь будущим вопросам в этом вопросе.

Ваш ответ на вопрос