2017-10-30 3 views
1

私はループを通してDataframeをシフトしたいと思います。私は以下のデータフレームを持っています。Pandasのループですべての列を移動する

  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ずつシフトしたいですか?これを行う方法はありますか(多分ループを使用して)?

+0

'df.shift(10)'? – Wen

答えて

0

は別の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 

3のようないくつかNによって、すべての列をシフトする必要がある場合:

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 
関連する問題