python - 如何在数据框中批量滞后列

标签 python pandas

我有一个超过 100 列的数据框。我需要滞后其中的 60 个,并且我知道需要滞后的列名称。有没有办法批量或仅几行滞后它们? 假设我有一个像下面这样的数据框

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)

这么多专栏似乎太多了。有一个更好的方法吗?提前致谢。

最佳答案

使用shiftadd_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  

如果只需要滞后某些列,可以通过列表过滤它们:

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

关于python - 如何在数据框中批量滞后列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53354653/

相关文章:

python - 为什么在gensim word2vec中创建了多个模型文件?

python - 如何使用 OpenCV 在 Python 中绘制灰度图像的 32-Bin 直方图

python - 如何将 Pandas 数据透视表转换为数据框

python - 如何仅当另一列包含特定值时才选择特定 ID 的所有行

python - 如何访问 pandas 数据框中前几行的数据?

python - 创建一个从 1 到 3 的数字的 pandas 列并再次重复

python - Pandas DataFrame 在索引上失败但 Series 成功

python - 从 R 转到 Python,数据框的 Python 等价物是什么?

python - 从 pyqt4 中的 QTableView 复制/粘贴多个项目?

python - django rest 框架嵌套对象