2016-11-20 5 views
0

私はこのようなデータフレームを持ち、shiftをn回適用するのと同等の新しい列を追加したいと考えています。例えば、N = 2ましょう:pandas dataframe範囲(1、n)のxのシフト(x)の合計

df = pd.DataFrame(numpy.random.randint(0, 10, (10, 2)), columns=['a','b']) 

    a b 
0 0 3 
1 7 0 
2 6 6 
3 6 0 
4 5 0 
5 0 7 
6 8 0 
7 8 7 
8 4 4 
9 2 2 

df['c'] = df['b'].shift(1) + df['b'].shift(2) 

    a b  c 
0 0 3 NaN 
1 7 0 NaN 
2 6 6 3.0 
3 6 0 6.0 
4 5 0 6.0 
5 0 7 0.0 
6 8 0 7.0 
7 8 7 7.0 
8 4 4 7.0 
9 2 2 11.0 

このように、カラムcカラムbから前n値の合計を取得します。

ループ以外では、これを大規模なものにするより良い方法がありますかn

答えて

1

あなたは2windowrolling()メソッドを使用することができます。

df['c'] = df.b.rolling(window = 2).sum().shift() 

df 
    a b  c 
0 0 3 NaN 
1 7 0 NaN 
2 6 6 3.0 
3 6 0 6.0 
4 5 0 6.0 
5 0 7 0.0 
6 8 0 7.0 
7 8 7 7.0 
8 4 4 7.0 
9 2 2 11.0 
関連する問題