как задерживать столбцы в пакете в датафрейме - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть фрейм данных с более чем 100 столбцами. мне нужно отстать от 60 из них, и я знаю имена столбцов, для которых мне нужно отставать. Есть ли способ отстать их в пакетном режиме или просто несколько строк? Скажем, у меня есть датафрейм, такой как belwo

col1 col2 col3 col4 col5 col6 ... col100
 1     2   3     4   5   6         8
 3     9   15    19  21  23        31

Единственный способ, которым я знаю, это сделать это один за другим. Т.е. запустить df['col1_lag']=df['col'].shift(1) для каждого столбца.

Кажется, это слишком много для такого количества столбцов. Есть лучший способ сделать это? Заранее спасибо.

1 Ответ

0 голосов
/ 17 ноября 2018

Используйте shift с add_prefix для нового DataFrame и join к оригиналу:

df1 = df.join(df.shift().add_suffix('_lag'))
#alternative
#df1 = pd.concat([df, df.shift().add_suffix('_lag')], axis=1)
print (df1)
   col1  col2  col3  col4  col5  col6  col100  col1_lag  col2_lag  col3_lag  \
0     1     2     3     4     5     6       8       NaN       NaN       NaN   
1     3     9    15    19    21    23      31       1.0       2.0       3.0   

   col4_lag  col5_lag  col6_lag  col100_lag  
0       NaN       NaN       NaN         NaN  
1       4.0       5.0       6.0         8.0  

Если хотитевозможно отставание только некоторых столбцов, отфильтруйте их по list:

cols = ['col1','col3','col5']
df2 = df.join(df[cols].shift().add_suffix('_lag'))
print (df2)
   col1  col2  col3  col4  col5  col6  col100  col1_lag  col3_lag  col5_lag
0     1     2     3     4     5     6       8       NaN       NaN       NaN
1     3     9    15    19    21    23      31       1.0       3.0       5.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...