2017-12-19 17 views
1

私はこのようなデータフレームを持っている:反復減算?

 abc 
9  32.242063 
3  24.419279 
8  25.464011 
6  25.029761 
10  18.851918 
2  26.027582 
1  27.885187 
4  20.141231 
5  31.179138 
7  22.893074 
11  31.640625 
0  33.150434 

Iは、次いで、100から最初の行を減算(100 - 最初の行)からの残りの値から2行目を減算するようにと。

私が試した:

a = 100 - df["abc"] 

が、毎回、それは誰もがそれを行うための正しい方法を提案することができます100

からそれを引いているの?

+0

? 。DF [ 'ABC'] CUMSUM()) ' - –

+1

は、あなたが' 100が必要ですか? – jezrael

+1

うん@jezrael、私は同じ答えに到着しました。また、私はそれが正しい答えだ、ループを書いたと確認しました。 –

答えて

3

あなたが必要なようだ:

df['new'] = 100 - df['abc'].cumsum() 
print (df) 
      abc   new 
9 32.242063 67.757937 
3 24.419279 43.338658 
8 25.464011 17.874647 
6 25.029761 -7.155114 
10 18.851918 -26.007032 
2 26.027582 -52.034614 
1 27.885187 -79.919801 
4 20.141231 -100.061032 
5 31.179138 -131.240170 
7 22.893074 -154.133244 
11 31.640625 -185.773869 
0 33.150434 -218.924303 
1

オプション1
np.cumsum -

df["abc"] = 100 - np.cumsum(df.abc.values) 
df 
      abc 
9 67.757937 
3 43.338658 
8 17.874647 
6 -7.155114 
10 -26.007032 
2 -52.034614 
1 -79.919801 
4 -100.061032 
5 -131.240170 
7 -154.133244 
11 -185.773869 
0 -218.924303 

これは、他の回答でpd.Series.cumsumよりも高速です。


オプション2
ルーピー同等、cythonized。出力期待

%load_ext Cython 

%%cython 
def foo(r): 
    x = [100 - r[0]] 
    for i in r[1:]: 
     x.append(x[-1] - i) 

    return x 

df['abc'] = foo(df['abc']) 
df 

      abc 
9 66.849566 
3 42.430287 
8 16.966276 
6 -8.063485 
10 -26.915403 
2 -52.942985 
1 -80.828172 
4 -100.969403 
5 -132.148541 
7 -155.041615 
11 -186.682240 
0 -219.832674