Как сдвиг столбца в панды фрейма данных
Я хотел бы переместить столбец в панд DataFrame
, но я не смог найти способ сделать это из документации без переписывания всего DF. Кто-нибудь знает как это сделать?
Фрейм данных:
## 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
4 ответа:
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
Если вы не хотите потерять столбцы сдвиг прошлом конец вашего фрейма данных, просто добавьте необходимое число сначала:
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,...
В конце фрейма данных (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 = 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)
как уже было опубликовано однако бы что отрезать перенос.