我有一个超过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)
。
如此多的列似乎太多了。有一个更好的方法吗?预先感谢。
答案 0 :(得分:0)
将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