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)
?