Python 通过一个循环移动所有列

Python 通过一个循环移动所有列,python,pandas,dataframe,Python,Pandas,Dataframe,我想通过循环移动我的数据帧。我有以下数据帧 A B 0 0.0 101 1 0.0 101.996163 2 0.0 209.987279 3 0.0 168.605494 4 0.0 138.245242 我可以使用以下代码移动每一列 for col in df.columns: df["%s_%s"%(c

我想通过循环移动我的数据帧。我有以下数据帧

           A          B     
0         0.0         101   
1         0.0  101.996163   
2         0.0  209.987279   
3         0.0  168.605494   
4         0.0  138.245242 
我可以使用以下代码移动每一列

for col in df.columns:
    df["%s_%s"%(col,-1)] = df[col].shift(1)
我从上面的代码中得到的输出是

           A          B            A_-1    B_-1
0         0.0  101.996163          NaN     NaN
1         0.0  209.987279          0       101.996163
2         0.0  168.605494          0       209.987279
3         0.0  138.245242          0       168.605494

但是,如果我必须创建额外的列,每个列表示不同的时间延迟,例如,希望将每个列移动10,该怎么办?有没有办法做到这一点(可能是通过使用循环)?

使用另一个
for

for col in df.columns:
    for i in range(1,5):
        df["%s_%s_%s"%(col,i,-1)] = df[col].shift(i)

print (df)
     A           B  A_1_-1  A_2_-1  A_3_-1  A_4_-1      B_1_-1      B_2_-1  \
0  0.0  101.000000     NaN     NaN     NaN     NaN         NaN         NaN   
1  0.0  101.996163     0.0     NaN     NaN     NaN  101.000000         NaN   
2  0.0  209.987279     0.0     0.0     NaN     NaN  101.996163  101.000000   
3  0.0  168.605494     0.0     0.0     0.0     NaN  209.987279  101.996163   
4  0.0  138.245242     0.0     0.0     0.0     0.0  168.605494  209.987279   

       B_3_-1  B_4_-1  
0         NaN     NaN  
1         NaN     NaN  
2         NaN     NaN  
3  101.000000     NaN  
4  101.996163   101.0  
如果需要将所有列移动N,如
3

for col in df.columns:
    df["%s_%s"%(col,-1)] = df[col].shift(3)

print (df)
     A           B  A_-1        B_-1
0  0.0  101.000000   NaN         NaN
1  0.0  101.996163   NaN         NaN
2  0.0  209.987279   NaN         NaN
3  0.0  168.605494   0.0  101.000000
4  0.0  138.245242   0.0  101.996163

对使用另一个

for col in df.columns:
    for i in range(1,5):
        df["%s_%s_%s"%(col,i,-1)] = df[col].shift(i)

print (df)
     A           B  A_1_-1  A_2_-1  A_3_-1  A_4_-1      B_1_-1      B_2_-1  \
0  0.0  101.000000     NaN     NaN     NaN     NaN         NaN         NaN   
1  0.0  101.996163     0.0     NaN     NaN     NaN  101.000000         NaN   
2  0.0  209.987279     0.0     0.0     NaN     NaN  101.996163  101.000000   
3  0.0  168.605494     0.0     0.0     0.0     NaN  209.987279  101.996163   
4  0.0  138.245242     0.0     0.0     0.0     0.0  168.605494  209.987279   

       B_3_-1  B_4_-1  
0         NaN     NaN  
1         NaN     NaN  
2         NaN     NaN  
3  101.000000     NaN  
4  101.996163   101.0  
如果需要将所有列移动N,如
3

for col in df.columns:
    df["%s_%s"%(col,-1)] = df[col].shift(3)

print (df)
     A           B  A_-1        B_-1
0  0.0  101.000000   NaN         NaN
1  0.0  101.996163   NaN         NaN
2  0.0  209.987279   NaN         NaN
3  0.0  168.605494   0.0  101.000000
4  0.0  138.245242   0.0  101.996163
df.shift(10)
df.shift(10)